Question

J'essaie d'utiliser PrincipalContext pour vérifier si un groupe d'utilisateurs local existe sur un ordinateur distant.

j'ai des problèmes avec PrincipalContext:

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

Cela fonctionne dans de tels scénarios :

  • local vers machine locale
  • local sur la machine virtuelle
  • machine de domaine vers machine de groupe de travail

Cependant, cela ne fonctionne pas dans le sens inverse :

  • machine virtuelle vers hôte local
  • ordinateur de groupe de travail vers ordinateur de domaine

J'obtiens ces erreurs :

Exception non-gérée:System.IO.FileNotFoundException :Le chemin réseau n'a pas été trouvé.

Exception non-gérée:System.Runtime.InteropServices.COMException :Le chemin réseau n'a pas été trouvé.

La première exception concerne la machine virtuelle, la seconde la machine du groupe de travail.

Toutes les machines ont un utilisateur avec le même nom et le même mot de passe et le code a été exécuté à partir de cet utilisateur.

Comment résoudre ce problème ?

Était-ce utile?

La solution

J'ai trouvé la réponse.Il semble que DirectoryServices ne fonctionne pas sur Windows 7 distant ou version ultérieure.Je suppose que lorsqu'un ordinateur est dans un groupe de travail, il est local et nous pouvons nous connecter et lorsqu'il est dans un domaine, il est distant.

J'ai suivi les étapes décrites ici :
System.IO.FileNotFoundException :Le chemin réseau n'a pas été trouvé.Exception lors de l'utilisation de l'objet DirectoryEntry sous Windows 7
et ici:
http://www.peppercrew.nl/index.php/2011/09/connect-to-remote-registry-fails-with-an-error-is-preventing-this-key-from-being-opened/

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

Cependant, je ne peux pas modifier les services et les paramètres de registre sur les serveurs de production.J'ai trouvé le moyen de créer un groupe :

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>();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top