[Active Directory] méthode FindAll(), d'un objet de type DirectorySearcher, trop

Signaler
Messages postés
45
Date d'inscription
vendredi 9 avril 2004
Statut
Membre
Dernière intervention
9 novembre 2009
-
Messages postés
45
Date d'inscription
vendredi 9 avril 2004
Statut
Membre
Dernière intervention
9 novembre 2009
-
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");
           
            foreach(String lettre in MaListe)
            {
                searcher.Filter = "(&(objectCategory=user)(SAMAccountName=" + lettre + "*))";
                SearchResultCollection collection = searcher.FindAll();

                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]
A voir également:

2 réponses

Messages postés
45
Date d'inscription
vendredi 9 avril 2004
Statut
Membre
Dernière intervention
9 novembre 2009
1
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]
Messages postés
45
Date d'inscription
vendredi 9 avril 2004
Statut
Membre
Dernière intervention
9 novembre 2009
1
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 :

searcher.PageSize = 40000;

On pourra trouver plus de détails ici:
http://msdn.microsoft.com/fr-fr/library/system.directoryservices.directorysearcher.sizelimit.aspx

Voila, avec ça plus de souci! Je peux enfin faire des requêtes LDAP simple sans avoir besoin de filtre!

J'espère que cela pourra servir à d'autres personnes!

Rastamath69, plus on travaille , plus on a des problèmes, donc plus on a de chances d'en résoudre!