Pregunta

Estoy intentando utilizar PrincipalContext para comprobar si existe un grupo de usuarios local en una computadora remota.

estoy teniendo problemas con PrincipalContext:

PrincipalContext ctx = new PrincipalContext(ContextType.Machine, machine, null, ContextOptions.Negotiate)

Funciona en tales escenarios:

  • máquina local a local
  • local a máquina virtual
  • máquina de dominio a máquina de grupo de trabajo

Sin embargo, no funciona en dirección opuesta:

  • máquina virtual al host local
  • máquina del grupo de trabajo a máquina del dominio

Recibo estos errores:

Excepción no controlada:System.IO.FileNotFoundException:La ruta de red no se encontró.

Excepción no controlada:System.Runtime.InteropServices.COMException:La ruta de red no se encontró.

La primera excepción es para la máquina virtual y la segunda para la máquina del grupo de trabajo.

Todas las máquinas tienen un usuario con el mismo nombre y contraseña y el código se ejecutó desde ese usuario.

¿Cómo solucionar este problema?

¿Fue útil?

Solución

Encontré la respuesta. Parece que DirectoryServices no funciona en Windows 7 o más nuevo remoto. Supongo que cuando una computadora está en un grupo de trabajo, entonces es local y podemos conectarnos y cuando está en un dominio, entonces es remoto.

Seguí los pasos descritos aquí:

System.io.FilenotFoundEception: La ruta de la red fue extraviado. Excepción al usar el objeto DirectoryEntry en Windows 7
Y aquí:
http://www.peppercrew.nl/index.php/2011/09/connect-to-remote-registry-fails-with-an-error-is-preventing- esta -CHEY-from-from-abre /

Enable File and Print sharing in the Firewall
Start the Remote Registry Service
Add remote user access to this registry entry: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg

Sin embargo, no puedo cambiar los servicios y la configuración de registro en los servidores de producción. Encontré tal manera de obtener el grupo:

var server = new DirectoryEntry(string.Format("WinNT://{0},Computer", machine));
DirectoryEntry group = server.Children.Cast<DirectoryEntry>().Where(
    d => d.SchemaClassName.Equals("Group") && d.Name.Equals("Administrators")
).Single<DirectoryEntry>();

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top