Fonction de recherche AD

Résolu
cs_Boulette67 Messages postés 4 Date d'inscription jeudi 30 juin 2011 Statut Membre Dernière intervention 15 février 2012 - 14 févr. 2012 à 16:40
cs_Boulette67 Messages postés 4 Date d'inscription jeudi 30 juin 2011 Statut Membre 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.

2 réponses

cs_Boulette67 Messages postés 4 Date d'inscription jeudi 30 juin 2011 Statut Membre Dernière intervention 15 février 2012
15 févr. 2012 à 20:00
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".
3
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
15 févr. 2012 à 19:17
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
0
Rejoignez-nous