2010-12-17 3 views
0

J'ai le code suivant pour interroger AD en utilisant DirectorySearcher pour obtenir tous les groupes AD pour un utilisateur.Requête AD pour rechercher tous les groupes d'un utilisateur - Un groupe manquant

 List<string> Groups = new List<string>(); 

     //initialize the directory entry object 
     DirectoryEntry dirEntry = new DirectoryEntry(ldapPath); 

     //directory searcher 
     DirectorySearcher dirSearcher = new DirectorySearcher(dirEntry); 

     //enter the filter 
     dirSearcher.Filter = string.Format("(&(objectClass=user)(sAMAccountName={0}))", username); 

     //get the member of properties for the search result 
     dirSearcher.PropertiesToLoad.Add("memberOf"); 
     int propCount; 
     SearchResult dirSearchResults = dirSearcher.FindOne(); 
     propCount = dirSearchResults.Properties["memberOf"].Count; 
     string dn; 
     int equalsIndex; 
     int commaIndex; 
     for (int i = 0; i <= propCount - 1; i++) 
     { 
      dn = dirSearchResults.Properties["memberOf"][i].ToString(); 

      equalsIndex = dn.IndexOf("=", 1); 
      commaIndex = dn.IndexOf(",", 1); 
      if (equalsIndex == -1) 
      { 
       return null; 
      } 
      if (!Groups.Contains(dn.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1))) 
      { 
       Groups.Add(dn.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1)); 
      } 
     } 

     return Groups; 

Mais quand je vérifie l'onglet « memberof » en l'an pour un utilisateur que j'ai un autre groupe « Les utilisateurs de domaine » que je ne reçois pas par ce code.

Des idées? Pourquoi je ne reçois pas les 'Utilisateurs du domaine' dans la collection 'memberof'?

+0

Peut être basé sur le serveur que vous utilisez et sur sa fonction/rôle, voir la section memberOf de cette page http://msdn.microsoft.com/fr-fr/library/ms677943 – curtisk

+0

Okie. J'ai appris d'ici - http://www.eggheadcafe.com/software/aspnet/30375857/directory-searcher-not-returning-all-groups.aspx que memberOf ne retournera pas les groupes primaires d'un utilisateur. Mais je peux obtenir le primaryGroupID qui donne le RID (?) Du groupe en utilisant ce dont j'ai besoin pour obtenir le groupe AD. Des idées comment le faire? – NLV

Répondre

3

Les groupes peuvent être membres d'autres groupes. Peut-être que vos utilisateurs ne sont pas des membres directs, mais seulement des membres indirects?

Je classe tous les groupes pour les groupes enfants aussi, lors de la récupération des groupes sur un AD. Soyez avertis que vous pouvez obtenir une récursion infinie, puisque les groupes peuvent (indirectement) se contenir les uns les autres. J'ai eu du mal à le découvrir :-(Maintenant, je me souviens de chaque groupe traité dans une liste "globale" pour ne le traiter qu'une seule fois pour éviter cela).

J'ai écrit un CodeProject article avec certaines bibliothèques à usage général, qui contiennent aussi des classes AD. (Voir les classes dans le sous-dossier "/Tools/DirectoryServices/" dans le fichier ZIP téléchargé).

+0

Alors, comment puis-je le trouver récursivement en utilisant DirectorySearcher? – NLV

+0

J'ai ajouté un lien à ma réponse. –

+0

Okie. J'ai récursif trouvé les groupes de parents. Mais encore deux groupes (ou dossiers?) 'Utilisateurs du domaine' ne viennent pas dans la liste. Mais si je vérifie l'onglet 'memberOf' c'est là. Les utilisateurs de domaine est un groupe intégré droit? Est-ce que j'ai râté quelque chose? – NLV

Questions connexes