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 :

AD et type des objets retournés .


Sujet :

C#

  1. #1
    Membre actif Avatar de Luffy49
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 399
    Points : 247
    Points
    247
    Par défaut AD et type des objets retournés .
    Voilà je travaille toujours sur mon projet de prise de contrôle a distance d'un AD. J'ai un petit soucis au niveau du type des objets que me retourne l'AD :

    Je fais dans l'ordre :

    1) Je me place dans une OU
    2) Je recupère tous les objets ( je ne fais pas de .filter)
    3) J'affiche dans ma treeview le samaacountname , le type et la description

    seul problème c'est que j'arrive pas a retourner le type des objets , comme user , ou groupe , ou encore computer . J'ai essayé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dr["Type"] = DirEntry.Properties["objectClass"].Value;
    mais rien n'y fait

  2. #2
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Rien n'y fait dans quel sens ? Il ne renvoie rien ou il ne renvoie pas ce à quoi tu t'attends ? Parce que objectClass est potentiellement multivalué, c'est peut-être de là que vient ton problème...

    Colle d'avantage de code, ça pourrait aider

  3. #3
    Membre actif Avatar de Luffy49
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 399
    Points : 247
    Points
    247
    Par défaut
    Il me renvoie System.Object[]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    ldap_search = new DirectoryEntry("GC://CN=" + OU + "," + Ldap.Name + ",DC=local", login, pwd);
                    DirectorySearcher search = new DirectorySearcher(ldap_search);
     
                    //Nouvelle table
                    DataTable dt = new DataTable(OU);
                    dt.Columns.Add("Nom");
                    dt.Columns.Add("Type");
                    dt.Columns.Add("Description");
     
                    //Pour Chaque résultat trouver dans l'AD
                    try
                    {
                        foreach (SearchResult result in search.FindAll())
                        {
                            DataRow dr = dt.NewRow();
                            DirectoryEntry DirEntry = result.GetDirectoryEntry();
     
                            dr["Nom"] = DirEntry.Properties["SAMAccountName"].Value;
                            dr["Description"] = DirEntry.Properties["description"].Value;
     
                            dr["Type"] = DirEntry.Properties["objectClass"].Value;
     
                            dt.Rows.Add(dr);
                        }
                    }
                    catch (Exception exept)
                    {
                    }
     
                    ds.Tables.Add(dt);
    Tu entend quoi par
    objectClass est potentiellement multivalué
    ?

  4. #4
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par Luffy49
    Il me renvoie System.Object[]
    Donc, le tableau contenant la hierarchie de tes objects class Typiquement, pour une OU -> top, organizationalUnit

    Donc, en bouclant sur chaque tableau, tu auras tous les types de tes entrées AD. Attention par contre, cette notion de hierarchie peut te jouer des tours : un iNetOrgPerson est un user, mais un User n'est pas un iNetOrgPerson. Faut juste en être conscient lorsque tu effectues tes tests.

    A+

  5. #5
    Membre actif Avatar de Luffy49
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 399
    Points : 247
    Points
    247
    Par défaut
    Ok je vais me pencher sur le tableau qui me renvoie pour arriver au résultat

    je ne sais absolument pas comment celui ci fonctionne ni comment il est hierarchiser mais on apprend jamais mieux que par sois même ( un mix de deux citation lol )

  6. #6
    Membre actif Avatar de Luffy49
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 399
    Points : 247
    Points
    247
    Par défaut
    Comment accèder aux attributs des objets que me retourne l'AD??

    car objectClass me retourne un objet et non un tableau

  7. #7
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Oh, rien de bien compliqué en l'occurrence : objectClass est un objet multivalué qui contient le nom de toutes les classes dont fait parti l'objet LDAP. Chaque classe traîne avec elle son lot d'attributs mandatory et possibles.

    Par exemple, iNetOrgPerson hérite de User, desendant lui-même de organizationalPerson, qui descend de person qui vient de top.

  8. #8
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par Luffy49
    car objectClass me retourne un objet et non un tableau
    Un tableau d'object pour être précis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ((Object[])DirEntry.Properties["objectClass"].Value)[i]
    Boucle sur le code ci-dessus pour récupérer toutes les valeurs (et, par exemple, pour les concaténer dans une seule string)

  9. #9
    Membre actif Avatar de Luffy49
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 399
    Points : 247
    Points
    247
    Par défaut
    J'ai un petit soucis et je ne vois absolument pas d'où il peus provenir :

    ajouts dans le dataset
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
            public static void ds_add(string OU)
            {
     
                try
                {
     
                    ldap_search = new DirectoryEntry("GC://CN=" + OU + "," + Ldap.Name + ",DC=local", login, pwd);
                    DirectorySearcher search = new DirectorySearcher(ldap_search);
     
                    //Nouvelle table
                    DataTable dt = new DataTable(OU);
                    dt.Columns.Add("Nom");
                    dt.Columns.Add("Type");
                    dt.Columns.Add("Description");
     
                    //Pour Chaque résultat trouver dans l'AD
                    try
                    {
                        foreach (SearchResult result in search.FindAll())
                        {
                            DataRow dr = dt.NewRow();
                            DirectoryEntry DirEntry = result.GetDirectoryEntry();
     
                            dr["Nom"] = DirEntry.Properties["SAMAccountName"].Value;
                            dr["Description"] = DirEntry.Properties["description"].Value;
                            dr["Type"] = search_type(DirEntry.Properties["objectClass"].Value);
                            dt.Rows.Add(dr);
                        }
                    }
                    catch (Exception exept)
                    {
                    }
     
                    ds.Tables.Add(dt);
     
                }
                catch (Exception e_load)
                {
     
                }
            }
    recherche du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            public static string search_type(Object type)
            {
                string type_objet="";
                int i = 0;
     
                for (i = 0; i <= 10; i++)
                {
                    MessageBox.Show(((Object[])type)[i].ToString());
                }
     
                return type_objet;
            }
    quand il y a des objets de l'AD le prog va bien dans la fonction search_type le seul problème c'est qu'il retourne type_objet et il ne reviens pas a la ligne :

    il ne continue pas l'ancienne procédure ds_add

  10. #10
    Membre actif Avatar de Luffy49
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 399
    Points : 247
    Points
    247
    Par défaut
    mdr surement un bug de VS2005 puisque je les rédamarrer et tous étais ok .... bizard

  11. #11
    Membre actif Avatar de Luffy49
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 399
    Points : 247
    Points
    247
    Par défaut
    Si sa peut aider quelqu'un plus tard voilà le code que j'ai finalement utilisé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
            //trouver le type de l'utilisateur
            public static string search_type(Object type)
            {
                string type_objet="";
     
                int dimension = ((Object[])type).Length;
                //récup du type de l'objet
                type_objet = ((Object[])type)[dimension-1].ToString();
     
                switch (type_objet)
                {
                    case "user":type_objet="Utilisateur";
                        break;
                    case "group" : type_objet="Groupe";
                        break;
                    case "container":type_objet="Conteneur";
                        break;
                }
     
                return type_objet;
            }

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

Discussions similaires

  1. Type des objets contenu dans un datatable
    Par lasrevinu dans le forum C#
    Réponses: 4
    Dernier message: 20/05/2010, 12h47
  2. Recordset : Type des objets retournés
    Par Carlito78 dans le forum ASP
    Réponses: 4
    Dernier message: 20/11/2009, 12h04
  3. préciser le type des objets dans une classe dérivée d'arraylist
    Par JCD21 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 28/06/2008, 18h04
  4. FileSystemObject et type des objets
    Par hpfx dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 15/10/2007, 23h50
  5. Conteneur générique et types des objets contenus
    Par bobuse dans le forum Langage
    Réponses: 4
    Dernier message: 12/04/2007, 11h59

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