Liste des utilisateurs dans Active Directory spécifique du Groupe de Distribution
Je vais essayer d'obtenir une liste des utilisateurs et des propriétés relatives à l'utilisateur à partir de l'intérieur d'un groupe active directory.
Mise à jour:
Voici les deux méthodes actuellement j'ai:
Dim adGroup As New DirectoryEntry("LDAP://CN=MyGroup,OU=Groups,OU=Accounts,OU=All,DC=domain,DC=com")
Dim adMembers As Object
Dim objUser As ActiveDirectoryUser
Dim objUserList As New List(Of ActiveDirectoryUser)
Dim directoryEntry As DirectoryEntry
adMembers = adGroup.Invoke("Members", Nothing)
For Each adMember As Object In CType(adMembers, IEnumerable)
directoryEntry = New DirectoryEntry(adMember)
objUser = New ActiveDirectoryUser
objUser.UserId = directoryEntry.Properties.Item("sAMAccountName").Value.ToString()
objUser.Contract = directoryEntry.Properties.Item("ou").Value.ToString()
objUser.LastName = directoryEntry.Properties.Item("sn").Value.ToString()
objUser.FirstName = directoryEntry.Properties.Item("givenName").Value.ToString()
objUser.Email = directoryEntry.Properties.Item("mail").Value.ToString()
objUserList.Add(objUser)
Next
Le premier morceau, bien qu'il semble tout à fait inefficace. Mon utilisation de la mémoire grimpe et grimpe comme c'est l'exécution et je commençais à cette erreur, mais il semble que cela peut être résolu. La deuxième méthode:
Dim results As SearchResultCollection
Dim directoryEntry2 As New DirectoryEntry("LDAP://DC=domain,DC=com")
Dim directorySearcher As New DirectorySearcher(directoryEntry2)
directorySearcher.PageSize = 1000
directorySearcher.Filter = "(&(objectCategory=person)" & _
"(objectClass=user)" & _
"(memberOf=CN=MyGroup,OU=Groups,OU=Accounts,OU=All,DC=domain,DC=com))"
directorySearcher.PropertiesToLoad.Add("ou")
directorySearcher.PropertiesToLoad.Add("sn")
directorySearcher.PropertiesToLoad.Add("givenName")
directorySearcher.PropertiesToLoad.Add("sAMAccountName")
directorySearcher.PropertiesToLoad.Add("mail")
results = directorySearcher.FindAll
Le résultat comte semble varier en fonction de chaque exécution de l'application que je trouve bizarre. Je ne suis pas sûr si c'est un moyen fiable d'obtenir les utilisateurs de dos ou si je dois modifier quelque chose sur ma recherche?
OriginalL'auteur Justin Helgerson | 2010-07-07
Vous devez vous connecter pour publier un commentaire.
SI vous le pouvez, faites la mise à niveau .NET 3.5 et utiliser le nouveau nettement améliorée
System.DirectoryServices.AccountManagement
espace de noms. Grand intro pour ces nouvelles classes est trouvé dans La gestion de Répertoire les entités de Sécurité dans le .NET Framework 3.5.Avec cela, votre travail devient trivial:
Cela fonctionne pour vous?
Si vous ne pouvez pas utiliser .NET 3.5, vous devriez inspecter les
member
propriété du groupe. Les membres du groupe sont pas stockées comme des enfants logiquement sous le groupe dans la hiérarchie, donc vous ne pouvez pas les trouver en utilisant unDirectorySearcher
.Voir le Liste rapide de Code C# Exemples pour Active Directory (ou du même pour les Visual Basic .NET) dans la bibliothèque MSDN pour cet extrait de code et plus.
Mise à jour: si vous avez besoin de la utilisateurs appartenant à un groupe particulier (puisque vous voulez mettre à jour leurs propriétés ou quelque chose), vous pouvez inverser la démarche: recherche de tous les utilisateurs qui ont un
memberOf
de propriété équivalent à du groupe DN:Merci pour votre aide jusqu'à présent. J'ai deux questions. Tout d'abord, vous avait dit que je ne pouvais pas obtenir les membres à l'aide d'un annuaire moteur de recherche, de sorte que dans la mise à jour de votre exemple je vois que je peux, donc j'espérais que vous pourriez élaborer sur ce que vous vouliez dire. Deuxièmement, je suis en mesure d'obtenir un résultat à l'aide de l'annuaire moteur de recherche, mais le comte de la collection semble varier à chaque fois que je lance mon application, lorsqu'elle doit être cohérente (personne n'est actuellement d'être ajouté au groupe).
vous pas énumérer un groupe pour trouver tous ses membres, car un groupe est pas un conteneur dans l'ANNONCE que vous pouvez énumérer. Il ne contient pas ses membres comme des objets enfants. Vous pouvez toutefois énumérer un répertoire de la branche et de trouver tous les utilisateurs qui sont membres d'un groupe spécifique.
utiliser le bon Nom unique pour votre groupe - qui comprendra la OU il est .....
merci man,vous avez sauvé mon temps.
OriginalL'auteur marc_s
La portée de votre recherche plus large, où les membres peuvent être:
De filtre basé sur l'appartenance à un groupe:
Toujours pas de chance. J'ai fait exactement ce que vous avez donné, jeté dans mes valeurs spécifiques, mais je ne reçois pas tout les résultats.
Ma réponse était une faute de frappe. Je pense que "memberOf" ne dispose pas d'un espace.
Comment est ma réponse différente de ce que vous suggérez dans la "mise à Jour" section de votre réponse?
votre message original n'aurait pas travaillé.... maintenant que vous avez corrigé, c'est presque la même que la mienne. Je voudrais limiter mon filtre LDAP pour objectCategory (valeur unique, indexé) et oublier objectClass, généralement - mais autre que cela, nous en sommes au même point que maintenant.
OriginalL'auteur Greg