IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[Active Directory] méthode FindAll() trop limitée


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 70
    Par défaut [Active Directory] méthode FindAll() trop limitée
    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:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     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 une solution?

    Merci d'avance,

    Rastamath69

  2. #2
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Salut.

    Je ne te propose pas une solution mais plutôt un test : as-tu testé ta requête dans un browser LDAP / AD pour voir ce qu'elle te renvoyait ?

    Dans certains cas, des limites administratives sont placées au niveau des résultats de recherche pour ne pas surcharger les annuaires (en LDAP "pur" en tout cas)...

    Bon courage

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 70
    Par défaut
    Salut!

    Non je n'ai pas réalisé ces tests. Je veux bien , mais qu'entends-tu par "browser LDAP / AD"??

    La seule interface que je connaisse pour me balader dans active directory est l'outil d'administration Windows. Mais je ne crois pas qu'il propose de fonctionnalité (en tout cas je n'ai pas trouvé) qui permettent de compter tous les utilisateurs d'un domaine...

    En avais-tu un autre en tête?

    Merci de ta réactivité!

    Rastamath69

  4. #4
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Re.

    J'avoue que je ne connais pas trop le browser AD fourni avec Windows (ou plutôt je ne suis pas habilité à l'utiliser dans mon entreprise ). J'imagine donc que les outils que je te propose font la même chose, mais au cas où ce ne serait pas le cas, tu peux essayer :

    Je te laisse tester

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    327
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 327
    Par défaut
    Bonjour,
    Le problème c'est que c'est un paramètre du serveur active directory qui définie le nombre maximal de résultat à retourné.
    Tu as de la chance que ce soit 7000 par default il est egale a 1000.
    Soit tu changes la valeur de ce parametre. (Voir les administrateur de domaine).
    Sinon tu peux essayer de le faire en plusieurs requête.
    A bientôt

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 70
    Par défaut
    Il semble que vous ayez raison tous les deux!

    Je n'ai pas pu le constater avec Softerra LDAP browser, car je ne suis pas arrivé à me connecter sur le domaine sur lequel je voulais aller (malgré les moultes tentatives de configuration que j'ai pu faire)!

    Il faudra que je vois l'administrateur du domaine, mais je doute qu'on puisse augmenter ce fameux paramètre de 7000 à 30000... D'après ce que j'ai compris cela permet au serveur de répondre plus vite lorsqu'il fait l'équivalent d'un Full Scan.

    La solution de réaliser cela en plusieurs requêtes m'intéresse donc, mais comment faire??

    Comme je l'ai cité dans mon premier message, mettre des filtres complémentaires fonctionne, mais comment m'assurer que je couvre tous les caractères possibles?
    Je ne vais pas parcourir une table de caractère construite à partir des codes ascii et faire ensuite des filtres avec chacun des caractères possibles, ça serait quand même moche au niveau programmation...

    Existe-t-il un moyen de demander au serveur qu'il me renvoie toutes les réponses mais sous forme d'ensembles de 7000 objets, pour mon cas?

    Merci!

    Rastamath69

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. méthode ADsGetObject (active directory)
    Par czezko dans le forum Delphi
    Réponses: 6
    Dernier message: 05/04/2007, 14h07
  2. [C#] Active directory LDAP
    Par Gauden dans le forum Windows Forms
    Réponses: 9
    Dernier message: 02/05/2005, 13h57
  3. [AD]Mise en place de Active Directory
    Par guiguisi dans le forum Windows Serveur
    Réponses: 9
    Dernier message: 29/07/2004, 08h50
  4. Réponses: 4
    Dernier message: 17/05/2004, 09h57
  5. Active directory
    Par m.schar dans le forum Développement
    Réponses: 5
    Dernier message: 22/03/2004, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo