Vous devez définir un filtre (DirectorySearcher.Filter) quelque chose comme:
"(& (objectCategory = person) (objectClass = user) (sAMAccountName = {0}))"
Notez que vous spécifiez uniquement le nom d'utilisateur (sans le domaine) pour la propriété sAMAccountName. Pour rechercher un domaine \ utilisateur, localisez d'abord le contexte de dénomination du domaine requis, puis recherchez sAMAccountName. Par ailleurs, lors de la création de chaînes de requête LDAP à l'aide de String.Format, vous devez généralement faire attention à l'échappement des caractères spéciaux. Il n'est probablement pas nécessaire pour un nom de compte, mais peut l'être si vous effectuez une recherche par d'autres propriétés, telles que la première propriété (givenName) ou le dernier nom (propriété sn) de l'utilisateur. J'ai une méthode utilitaire EscapeFilterLiteral pour faire ceci, vous construisez votre chaîne comme ceci:
String.Format("(&(objectCategory=person)(objectClass=user)(sn={0}))",
EscapeFilterLiteral(lastName, false));
où EscapeFilterLiteral est mis en œuvre comme suit:
public static string EscapeFilterLiteral(string literal, bool escapeWildcards)
{
if (literal == null) throw new ArgumentNullException("literal");
literal = literal.Replace("\\", "\\5c");
literal = literal.Replace("(", "\\28");
literal = literal.Replace(")", "\\29");
literal = literal.Replace("\0", "\\00");
literal = literal.Replace("/", "\\2f");
if (escapeWildcards) literal = literal.Replace("*", "\\2a");
return literal;
}
Cette implémentation vous permet de traiter le caractère * dans le cadre du literal (escapeWildcard = true) ou en tant que caractère générique (escapeWildcard = false). MISE À JOUR: Cela n'a rien à voir avec votre question, mais l'exemple que vous avez posté n'appelle pas Dispose sur les objets jetables qu'il utilise. Comme tous les objets jetables, ces objets (DirectoryEntry, DirectorySearcher, SearchResultCollection) doivent toujours être éliminés, normalement avec l'instruction using. Voir this post pour plus d'informations.
Comment trouvez-vous * d'abord trouver le contexte de nommage pour le domaine requis, recherche alors il *? – Sam