2014-07-24 1 views
0

J'essaie d'obtenir tous les membres d'un groupe Active Directory en C#. Mon code ressemble:DirectorySearcher ne renvoie pas tous les membres du groupe AD

var searcher = new DirectorySearcher(defaultNamingContextEntry) { 
    Filter = "(memberOf=" + group.Properties["distinguishedName"].Value + ")", 
    PageSize = 1000, 
    SearchScope = SearchScope.Subtree, 
    Sort = new SortOption("sAMAccountName", SortDirection.Ascending) 
}; 
var members = searcher.FindAll(); 

Le code fonctionne jusqu'à présent, mais il a le problème qu'il ne retourne pas tous les membres du groupe.

Je crois (je ne suis pas sûr) qu'il retourne ce que je peux réellement voir pour l'attribut "membre" dans ADSI Edit (le groupe en question est un peu grand pour tout comparer, mais loin en dessous de 1000), mais ces ne sont pas tous membres. Certains utilisateurs sont, selon AD Users & Ordinateurs, dans le groupe qui ne sont pas répertoriés. Si je regarde dans la page "Membre de", je peux voir le groupe, et les paramètres ACL via le groupe affectent également les utilisateurs manquants. Cependant, ils ne sont pas dans le jeu de résultats.

Le groupe en question est le groupe principal, dans le cas où cela est pertinent.

Quel est le problème ici? Quels seraient les paramètres ou les requêtes corrects? Est-ce un problème de l'AD elle-même? J'ai analysé le problème (et j'ai testé la solution de Brian, que je recommande fortement si vos collections de propriétés sont vraiment grandes, je pensais qu'il devait y avoir un mécanisme de recherche de propriétés pour les propriétés, mais je n'ai pas pu trouver comment cela fonctionne):

Je sais maintenant que le DirectorySearcher renvoie le résultat correct comme vu dans ADSI modifier.

Je sais également que le "Groupe principal" (défini par le bouton "Set Primary Group" sur la page "Membre de" dans AD Users & Computers) est manquant. Les extensions Unix sont activées dans l'AD, donc nous utilisons généralement cette option. Changer le groupe principal change les membres qui manquent. L'effet est déterministe.

J'ai regardé les entrées en utilisant l'édition ADSI, mais je n'ai pas trouvé le champ qui me permettrait d'ajouter le groupe principal dans ma recherche. Bien que j'aie activé tous les attributs (Obligatoire, Facultatif, Construit, Lien arrière et Système uniquement), je ne peux pas voir le groupe principal.

Ma question révisée est: quel est le filtre LDAP correct pour récupérer le groupe primaire, aussi?

Répondre

1

Vous devez effectuer une plage de valeurs. Voir http://www.netid.washington.edu/documentation/enumeratingLargeGroups.aspx pour un exemple.

+0

Les informations sur la variation de valeur sont très utiles, mais cela ne semble pas résoudre le problème. Les groupes en question comptent environ 80 et 300 membres. Je crois que les résultats de la recherche sont corrects. Toutes les façons de l'interroger comme '(memberOf = groupId)', en chargeant la propriété 'member' à la fois n'importe quelle suggestion donne le même résultat qui ne reflète pas l'appartenance réelle au groupe de sécurité que nous observons dans Windows. J'étudierai plus loin ... – Christoph

+1

L'appartenance au groupe primaire n'est pas stockée au même endroit. Jetez un oeil à http://support.microsoft.com/kb/297951. –

+0

Brian, vous connaissez Active Directory! J'ai ajouté une recherche pour '" (primaryGroupId = "+ groupRid +") "' et maintenant je reçois tous les comptes attendus. – Christoph

Questions connexes