Comment puis-je obtenir une liste d'utilisateurs depuis Active Directory? Existe-t-il un moyen d'extraire le nom d'utilisateur, le prénom, le nom? J'ai vu un article similaire où cela a été utilisé:
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN");
Je n'ai jamais rien fait avec Active Directory donc je suis complètement perdu. Toute aide serait grandement appréciée!
Réponses:
Si vous êtes nouveau dans Active Directory, je vous suggère de comprendre d'abord comment Active Directory stocke les données.
Active Directory est en fait un serveur LDAP. Les objets stockés sur le serveur LDAP sont stockés de manière hiérarchique. C'est très similaire au stockage de vos fichiers dans votre système de fichiers. C'est pourquoi il a le nom de serveur d' annuaire et Active Directory
Les conteneurs et objets sur Active Directory peuvent être spécifiés par un
distinguished name
. Le nom distinctif est comme çaCN=SomeName,CN=SomeDirectory,DC=yourdomain,DC=com
. Comme une base de données relationnelle traditionnelle, vous pouvez exécuter une requête sur un serveur LDAP. C'est ce qu'on appelle la requête LDAP.Il existe plusieurs façons d'exécuter une requête LDAP dans .NET. Vous pouvez utiliser DirectorySearcher à partir de
System.DirectoryServices
ou SearchRequest à partir deSystem.DirectoryServices.Protocol
.Pour votre question, puisque vous demandez de trouver spécifiquement l'objet principal de l'utilisateur, je pense que le moyen le plus intuitif est d'utiliser PrincipalSearcher à partir de
System.DirectoryServices.AccountManagement
. Vous pouvez facilement trouver de nombreux exemples différents sur Google. Voici un exemple qui fait exactement ce que vous demandez.Notez que sur l'objet utilisateur AD, il existe un certain nombre d'attributs. En particulier,
givenName
vous donnera leFirst Name
etsn
vous donnera leLast Name
. À propos du nom d'utilisateur. Je pense que vous vouliez dire le nom de connexion de l'utilisateur. Notez qu'il existe deux noms de connexion sur l'objet utilisateur AD. Le premier estsamAccountName
, également connu sous le nom de nom de connexion utilisateur antérieur à Windows 2000.userPrincipalName
est généralement utilisé après Windows 2000.la source
if (((UserPrincipal)result).EmailAddress != null)
avant d'ajouter le résultat à ma liste.Si vous souhaitez filtrer vos comptes actifs, ajoutez ceci au code de Harvey:
après la première utilisation. Puis ajouter
avant de tout trouver. Et cela devrait vous amener les plus actifs.
la source
searcher.QueryFilter = userPrin;
car nous transmettons déjà le principal de l'utilisateur au chercheur principal lors de l'initialisation, mais sinon merci pour le conseil sur le filtrage des utilisateurs actifs uniquement!using (var searcher = new PrincipalSearcher(new UserPrincipal(context){ Enabled = true }))
Enabled
aviez une valeur:if (userPrincipal.Enabled.HasValue)
Le mérite revient certainement à @Harvey Kwok ici, mais je voulais juste ajouter cet exemple car dans mon cas, je voulais obtenir une véritable liste des utilisateurs principaux. Il est probablement plus efficace de filtrer cette requête à l'avance, mais dans mon petit environnement, il est simplement plus facile de tout extraire, puis de filtrer au besoin plus tard dans ma liste.
Selon ce dont vous avez besoin, vous n'aurez peut-être pas besoin de convertir en DirectoryEntry, mais certaines propriétés ne sont pas disponibles à partir de UserPrincipal.
la source
Incluez le System.DirectoryServices.dll, puis utilisez le code ci-dessous:
la source