[Active Directory] méthode FindAll(), d'un objet de type DirectorySearcher, trop
rastamath69
Messages postés45Date d'inscriptionvendredi 9 avril 2004StatutMembreDernière intervention 9 novembre 2009
-
15 juin 2009 à 10:59
rastamath69
Messages postés45Date d'inscriptionvendredi 9 avril 2004StatutMembreDernière intervention 9 novembre 2009
-
9 nov. 2009 à 16:42
Bonjour à tous,
Je travaille à l'heure actuelle sur une base Active Directory contenant un peu plus de 30000 utilisateurs.
Je dois arriver à parcourir tous ces utilisateurs afin de leur faire subir des modifications qui peuvent être différentes pour chacun d'entre eux suivant divers critères.
Mon soucis, est que lorsque j'utilise la méthode FindAll() de mon objet DirectorySearcher, la collection se limite à 7000 objets et pas un de plus... J'ai essayé de regarder du coté des différents paramètres de l'objet pour mieux contrôler sa taille comme l'attribut ".SizeLimit", mais cela ne change rien...
Voici un résumé de mon code:
DirectorySearcher searcher = new DirectorySearcher(Ldap);
Int32 total = 0;
searcher.SizeLimit = 40000;
SearchResultCollection collection = searcher.FindAll();
total = collection.Count;
"total" est toujours égal à 7000.
Pour information si je fais un filtre de ce genre et que j'additionne les résultats :
List<String> MaListe = new List<String>();
MaListe.Add("A");
... //MaListe contient toutes les lettres de l'alphabet
MaListe.Add("Z");
total += collection.Count;
}
Dans ce cas, "total" contient bien les 30000 utilisateurs. (le problème de cette solution est que je passe outre tous les login spécifiques qui commencent par des #, !, ...)
Quelqu'un aurait-il la solution?
Merci,
Rastamath69, plus on travaille , plus on a des problèmes, donc plus on a de chances d'en résoudre! [8D]
rastamath69
Messages postés45Date d'inscriptionvendredi 9 avril 2004StatutMembreDernière intervention 9 novembre 20091 16 juin 2009 à 08:48
Bonjour à tous!
Visiblement, je ne suis pas le seul à caler sur le sujet , ça me rassure!
Pour information, j'ai trouvé le pourquoi de la chose, mais pas la solution!
En fait le serveur Active Directory a visiblement dans son paramétrage une valeur qui lui indique le nombre maximum de valeurs a renvoyer (cela sert à éviter qu'il ne s'écroule quand il y a vraiement beaucoup de requêtes qui se font sur lui). Dans mon cas cette valeur est fixée à 7000...
Mais mon problème reste entier... Comment remonter tous les users de cette base en paquets de maximum 7000??
L'idée de faire un filtre spécifique par caractère ASCII ne m'enchante guère (c'est pas super élégant)... Mais ai-je le choix?
Si quelqu'un a une astuce, je suis preneur!!
merci!
Rastamath69, plus on travaille , plus on a des problèmes, donc plus on a de chances d'en résoudre! [8D]
rastamath69
Messages postés45Date d'inscriptionvendredi 9 avril 2004StatutMembreDernière intervention 9 novembre 20091 9 nov. 2009 à 16:42
I'm back!
Simple remarque à ajouter à cette discussion, à savoir que j'ai trouvé ma solution il y a quelques jours, sans pour autant faire une quelconque demande à l'administrateur Active Directory.
J'étais sur la bonne piste 5 mois auparavant, mais passer le paramètre
Code :
searcher.SizeLimit = 40000;
ne suffit pas, il fallait également indiquer le paramètre:
Code :