2011-05-25 2 views
4

Disons que j'ai une liste de SID.Demande Active Directory rapide

Actuellement, j'interroge l'AD pour chaque SID. Quelque chose comme

foreach(string sidString in listOfSid) 
{ 
    DirectorySearcher search = new .... 

    search.Filter = string.Format("(objectSid={0})", ConvertToOctetString(sidString)); 

    var result = search.FindOne(); 

    ..... 
} 

Y at-il un moyen plus rapide que cela? Au lieu de boucler, y a-t-il un moyen d'interroger toutes les informations en un coup au lieu de la boucle?

+0

Est-ce que cela doit être fait en C#? – benPearce

Répondre

5

Je ne suis pas sûr de comprendre votre question, mais pourquoi ne construisez-vous pas un filtre dans une boucle, puis recherchez une fois. Le filtre ressemblera:

(|(objectSid=sid1)(objectSid=sid2)(...)(objectSid=sidn)) 

Si vous avez .NET 3.5 ou plus, alors vous pouvez work with principals.

Selon How Active Directory Searches Work, la taille de requête LDAP maximale que le serveur tente de traiter est de 10485760 octets. Si le serveur reçoit une requête supérieure à cette valeur, il ferme la connexion. Cela dit, je ne l'ai jamais testé.

+0

Merci! C'était exactement ça! Je n'étais pas sûr de la syntaxe du filtre. Maintenant je le comprends. – pdiddy

+0

Oui un peu étrange, il utilise la notation polonaise (PN) ou notation notation qui sont la notation mathématique dans laquelle chaque opérateur préfixe tous ses opérandes. – JPBlanc

+0

Merci pour les connaissances! Je me demandais quelle syntaxe c'était. – pdiddy