0

J'ai écrit une petite application pour vérifier les membres du groupe AD. Lorsque j'exécute le code suivant sur mon PC, Cela fonctionne bien, le SearchResult contient la propriété "member", cependant quand je cours le même exe sur le serveur ou sur un autre ordinateur la propriété "member" est manquante. L'usnchanged et usncreated sera différent aussi. Je cours l'exe avec le même utilisateur sur chaque PC. Qu'est-ce qui peut causer ça?Résultat différent avec DirectorySearcher

... 
using (DirectorySearcher searcher = new DirectorySearcher()) 
{ 
    searcher.CacheResults = false; 
    searcher.Filter = "(&(objectClass=group)(cn=" + ADName + "))"; 
    searcher.SizeLimit = int.MaxValue; 
    searcher.PageSize = int.MaxValue; 
    if (!DirectoryEntry.Exists(ADPath)) 
    { 
     return null; 
    } 
    searcher.SearchRoot = new DirectoryEntry(ADPath); 
    using (SearchResultCollection collection = searcher.FindAll()) 
    { 
     if (collection.Count == 1) 
     { 
      return collection[0]; 
     } 
    } 
} 
... 
+0

Et dans ADPath vous pointez sur votre serveur d'annuaire actif? – rene

+0

ADPath est "GC: // DC = DOMAINE, DC = SOCIETE, DC = com" –

Répondre

0

Les données d'appartenance au groupe ne sont pas répliquées dans le catalogue global. La requête peut parfois fonctionner, si vous vous connectez au contrôleur de domaine avec les données d'appartenance réelles. Sur d'autres machines, vous vous connectez probablement à d'autres contrôleurs de domaine, de domaines différents, où l'information n'est pas disponible.

Vous souhaiterez peut-être vous connecter à un contrôleur de domaine dans le domaine actuel, pas au catalogue global.

+0

Vous avez raison, si je spécifie le contrôleur de domaine, cela fonctionne bien, donc l'ADPath sera "GC: // Domain_Controller_IP/DC = DOMAIN , DC = COMPAGNIE, DC = com ". Mais comment puis-je déterminer le bon contrôleur de domaine, car sur le serveur si j'exécute l'écho% LOGONSERVER% de cmd, il donnera une sortie différente de celle de mon PC local. Et si je le lance depuis un autre domaine, le contrôleur sera différent aussi. Le moyen le plus simple est de coder en dur l'ip, mais je ne le veux pas. –

+0

Vous n'avez pas besoin de spécifier IP. Vous pouvez utiliser quelque chose comme "LDAP: // Domain_Controller_Address/DC = DOMAINE, DC = SOCIETE, DC = com". – Tomer

+0

Très bien, nouveau PrincipalContext (ContextType.Domain, DOMAIN) .ConnectedServer contient la bonne adresse. Merci pour le support rapide! –