J'essaie de rechercher des utilisateurs dans AD avec leur nom (sn
) et leur prénom (givenName
) en utilisant DirectorySearcher
dans .NET.
Je peux trouver un utilisateur basé sur sAMAccountname
avec ce code:
DirectorySearcher searcher1 = new DirectorySearcher(entry);
searcher1.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(SAMAccountname={0}))",aLogin);
SearchResult results1;
results1 = searcher1.FindOne();
Mais quand j'essaye de le faire avec givenName
et sn
:
DirectorySearcher searcher1 = new DirectorySearcher(entry);
searcher1.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(givenname={0})(sn={1})", aName, aSName);
SearchResultCollection results1;
results1 = searcher1.FindAll();
Ça ne marche pas; le message indique "Filtre non valide"; Puis-je ne pas filtrer en fonction de givenName
et sn
?
Comment puis-je atteindre cet objectif?
Il manque une parenthèse fermante dans votre filtre. Essayer:
searcher1.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(givenname={0})(sn={1}))", aName, aSName);
Si vous utilisez .NET 3.5 ou une version plus récente, vous pouvez également utiliser le PrincipalSearcher
et un principal "requête par exemple" pour effectuer votre recherche:
// create your domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
// define a "query-by-example" principal - here, we search for a UserPrincipal
// and with the first name (GivenName) of "Bruce" and a last name (Surname) of "Miller"
UserPrincipal qbeUser = new UserPrincipal(ctx);
qbeUser.GivenName = "Bruce";
qbeUser.Surname = "Miller";
// create your principal searcher passing in the QBE principal
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);
// find all matches
foreach(var found in srch.FindAll())
{
// do whatever here - "found" is of type "Principal" - it could be user, group, computer.....
}
Si vous ne l'avez pas déjà fait - lisez absolument l'article MSDN Gestion des principaux de sécurité de l'annuaire dans le .NET Framework 3.5 qui montre bien comment tirer le meilleur parti des nouvelles fonctionnalités de System.DirectoryServices.AccountManagement
. Ou consultez l'espace de noms documentation MSDN sur System.DirectoryServices.AccountManagement .
Bien sûr, en fonction de vos besoins, vous souhaiterez peut-être spécifier d'autres propriétés sur le principal d'utilisateur "requête par exemple" que vous créez:
DisplayName
(généralement: prénom + espace + nom)SAM Account Name
- le nom de votre compte Windows/ADUser Principal Name
- votre nom de style "[email protected]"Vous pouvez spécifier n'importe laquelle des propriétés sur le UserPrincipal
et les utiliser comme "requête par exemple" pour votre PrincipalSearcher
.
Pas du tout c'est une erreur ..
J'ai oublié un )