Fonction de recherche AD [Résolu]

Messages postés
4
Date d'inscription
jeudi 30 juin 2011
Dernière intervention
15 février 2012
- - Dernière réponse : cs_Boulette67
Messages postés
4
Date d'inscription
jeudi 30 juin 2011
Dernière intervention
15 février 2012
- 15 févr. 2012 à 20:00
Bonjour amis du développement ;)

Je me suis mis il y a peu au C#.

J'ai un WinForm avec un bouton recherche qui vérifie quel radioBouton (Utilisateur ou Ordinateur) est sélectionné, ce qui me permet de renseigner ma variable strType = = "user" ou == "computer" et critère qui est un textbox c'est là que je tape le nom de l'utilisateur ou le nom de l'ordinateur. Jusque là tout va bien rien de surprenant.

Sauf que je n'ai jamais de retour, mon rech.FindAll() renvoi toujours null.

J'ai du louper un truc car ce code (en VB) fonctionne. Je suis sur de la présence des comptes que je cherche ainsi que du compte que j'utilise (administrateur du domaine) :cry:

Ma fonction
private string[] Recherche(string strType, string strCritere)
        {
            string[] tableau   = null;
            try
            {
                DirectoryEntry ldap = new DirectoryEntry("LDAP://domain.fr", "compte", "mdp");
                DirectorySearcher rech  = new DirectorySearcher(ldap);
                
                rech.Filter = "(&(objectclass=" + strType + ")(SAMAccountName=" + strCritere + "))";
                SearchResultCollection resultats = rech.FindAll();

                foreach (SearchResult resultat in resultats) 
                {
                    DirectoryEntry entree   = resultat.GetDirectoryEntry();
                    string nom              = entree.Properties["SAMAccountName"].Value.ToString();     //Compte AD
                    string description      = entree.Properties["description"].Value.ToString();        //Description
                    string chemin           = entree.Properties["distinguishedName"].Value.ToString();  //Chemin UO
                    if (strType == "user")
                    {
                        string postofficebox = entree.Properties["postofficebox"].Value.ToString();
                        tableau = new string[] { nom, postofficebox, description, chemin };             //Renseignements utilisateurs
                        postofficebox = null;
                    }
                    else
                    {
                        tableau = new string[] { nom, description, chemin };                            //Renseignements ordinateurs
                    }

                    nom = null;
                    description = null;
                    chemin = null;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                tableau = null;
            }

            return tableau;

        }


J'ai suivi le tuto ["http://lgmorand.developpez.com/dotnet/adimage/" http://lgmorand.developpez.com/dotnet/adimage/]

Merci d'avance à ceux qui vont passer du temps à me lire. J'espère avoir été précis.
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
4
Date d'inscription
jeudi 30 juin 2011
Dernière intervention
15 février 2012
3
Merci
Bonjour Whismeril,

En fait je suis une grosse quiche
En faisant plusieurs test ce soir j'ai pu constater que ma fonction est correcte. C'est le contenu de ma variable strCritere qui n'est pas bon.

Mon filtre se fait sur SAMAccountName qui retourne une chaine de type "bob.tartempion"
Dans mon textBox je saisissais : "tartemp*"
Forcément cela ne fonctionne pas, j'aurai du saisir "*tartemp*" ou changer le SAMAccountName de mon filtre pour CN qui lui retourne "TARTEMPION Bob".

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 95 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Boulette67
Messages postés
12415
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 décembre 2018
0
Merci
Bonjour,

critère qui est un textbox
s'agit-il de strCritere?

Si oui alors tu dois écrire strCritere.Text quand tu veux accéder au texte saisi, là par exemple:
rech.Filter = "(&(objectclass=" + strType + ")(SAMAccountName=" + strCritere + "))";


En VB6 (en .Net je ne sais pas) quand dans une ligne de ce type tu écris juste le nom d'une textbox ça retourne le texte saisi, en C# ça retourne la valeur de .ToString().
Par défaut la valeur de .ToString() est une string décrivant le type de la variable, dans ton cas ""System.Windows.Forms.TextBox".
La valeur de rech.filter n'est donc pas trouvable.


Whismeril
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.