web-dev-qa-db-fra.com

Comment rechercher des utilisateurs dans Active Directory en fonction du nom et du prénom?

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?

18
bAN

Il manque une parenthèse fermante dans votre filtre. Essayer:

searcher1.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(givenname={0})(sn={1}))", aName, aSName);
11
Matt

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/AD
  • User 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.

29
marc_s

Pas du tout c'est une erreur ..

J'ai oublié un )

0
bAN