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

Accès aux données Discussion :

Acces aux propriétés d'un user à partir du DN [Débutant(e)]


Sujet :

Accès aux données

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2008
    Messages : 54
    Points : 98
    Points
    98
    Par défaut Acces aux propriétés d'un user à partir du DN
    Bonjour, voici mon code actuel.

    J'ai deux listbox, la première affiche des groupes AD triés.
    Sélectionner l'un des groupes doit afficher les utilisateurs qui en sont membres dans la seconde listbox.

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.Security.Principal;
    using System.DirectoryServices;
     
    namespace WpfApplication1
    {
        /// <summary>
        /// Logique d'interaction pour MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            String uid = WindowsIdentity.GetCurrent().Name;
            String server = "LDAP://192.168.1.20";
            String login = "login";
            String pass = "pass";
     
            public MainWindow()
            {
                InitializeComponent();
                label1.Content = "Bonjour " + uid + ", voici les groupes dont vous êtes responsable";
                try
                {
                    DirectoryEntry Ldap = new DirectoryEntry(server, login, pass); 
                    DirectorySearcher searcher = new DirectorySearcher(Ldap);
                    searcher.Filter = "(&(objectClass=group)(SAMAccountName=A_*))";
     
                    foreach (SearchResult result in searcher.FindAll())
                    {
                        // On récupère l'entrée trouvée lors de la recherche
                        DirectoryEntry DirEntry = result.GetDirectoryEntry();
     
                        //On peut maintenant afficher les informations désirées
                        listBox1.Items.Add(DirEntry.Properties["SAMAccountName"].Value);
                        //Console.WriteLine("Login : " + DirEntry.Properties["SAMAccountName"].Value);
                        //Console.WriteLine("Nom : " + DirEntry.Properties["sn"].Value);
                        //Console.WriteLine("Prénom : " + DirEntry.Properties["givenName"].Value);
                        //Console.WriteLine("Email : " + DirEntry.Properties["mail"].Value);
                        //Console.WriteLine("Tél : " + DirEntry.Properties["TelephoneNumber"].Value);
                        //Console.WriteLine("Description : " + DirEntry.Properties["description"].Value);
                    }
     
                }
                catch (Exception Ex)
                {
                    MessageBox.Show(Ex.Message);
                }
     
            }
     
            private void button1_Click(object sender, RoutedEventArgs e)
            {
                button1.Content = "Encore";
            }
     
            private void button2_Click(object sender, RoutedEventArgs e)
            {
                //ActiveDirectoryRights
                MessageBox.Show(listBox1.SelectedItem.ToString());
            }
     
            private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                listBox2.Items.Clear();
     
                DirectoryEntry Ldap = new DirectoryEntry(server, login, pass);
                DirectorySearcher searcher = new DirectorySearcher(Ldap);
                searcher.Filter = "(&(objectClass=group)(SAMAccountName=" + listBox1.SelectedItem.ToString() + "))";
                DirectoryEntry group = searcher.FindOne().GetDirectoryEntry();
     
                foreach (String dn in group.Properties["member"])
                {
                    //MessageBox.Show(ldp);
                    DirectoryEntry Ldap2 = new DirectoryEntry(server + "/" + dn.ToString(), login, pass);
                    DirectorySearcher searcher2 = new DirectorySearcher(Ldap2);
                    searcher2.Filter = "(objectClass=user)";
                    DirectoryEntry user = searcher2.FindOne().GetDirectoryEntry(); //La référence d'objet n'est pas définie à une instance d'un objet.
     
                    String test = (string) Ldap2.InvokeGet("sAMAccountName");
                    listBox2.Items.Add(test);
                }
            }
        }
    }
    Ma question principale porte sur la fin:

    les 3 lignes qui concernent le "searcher2" ne fonctionnent pas, si il y a plus de 2 "dn", le programme pédale dans la semoule.
    l'erreur est
    La référence d'objet n'est pas définie à une instance d'un objet.
    Si je les enlève ça fonctionne, mais j'obtiens aussi les groupes ce que je ne souhaite pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    foreach (String dn in group.Properties["member"])
                {
                    //MessageBox.Show(ldp);
                    DirectoryEntry Ldap2 = new DirectoryEntry(server + "/" + dn.ToString(), login, pass);
                    DirectorySearcher searcher2 = new DirectorySearcher(Ldap2);
                    searcher2.Filter = "(objectClass=user)";
                    DirectoryEntry user = searcher2.FindOne().GetDirectoryEntry(); //La référence d'objet n'est pas définie à une instance d'un objet.
    
                    String test = (string) Ldap2.InvokeGet("sAMAccountName");
                    listBox2.Items.Add(test);
                }
            }
    Débutant en Dotnet/C# mais programmeur "amateur" de différents langages depuis des lustres.
    J'utilise Visual studio 2010 express et le framework 4.0

    Environnement de travail Windows 7 et 2008.
    Administrateur accro en scripting, essentiellement Powershell.

  2. #2
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2008
    Messages : 54
    Points : 98
    Points
    98
    Par défaut
    résolu, l'application d'une méthode au filtre posaient probléme quand le résultat était "Null".
    Je note que "Null" est un flag du au filtre mais n’empêche absolument pas d’accéder au résultat de la recherche, un groupe en l'occurence.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                foreach (String dn in group.Properties["member"])
                {
                    //MessageBox.Show(ldp);
                    DirectoryEntry Ldap2 = new DirectoryEntry(server + "/" + dn.ToString(), login, pass);
                    DirectorySearcher searcher2 = new DirectorySearcher(Ldap2);
                    searcher2.Filter = "(objectClass=user)";
     
                    if (searcher2.FindOne() != null) {
                    DirectoryEntry user = searcher2.FindOne().GetDirectoryEntry();
                    String test = (string) Ldap2.InvokeGet("sAMAccountName");
                    listBox2.Items.Add(test);
                    }
                }
    Question subsidiaire, ais-je besoin de donner à chaque DirectoryEntry Ldap2 = new DirectoryEntry(server + "/" + dn.ToString(), login, pass); les login et mots de pass ?
    Comment puis-je rendre ce code plus élégant ?
    Débutant en Dotnet/C# mais programmeur "amateur" de différents langages depuis des lustres.
    J'utilise Visual studio 2010 express et le framework 4.0

    Environnement de travail Windows 7 et 2008.
    Administrateur accro en scripting, essentiellement Powershell.

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

Discussions similaires

  1. Zone de liste, accès aux propriétés par code
    Par AndréPe dans le forum VBA Access
    Réponses: 3
    Dernier message: 10/02/2007, 10h41
  2. [C#]Accéder aux propriétés d'un User Control
    Par djoao dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/03/2006, 09h54
  3. Réponses: 4
    Dernier message: 22/12/2005, 11h43
  4. [Problème] Accès aux propriétés de listes nommées avec []
    Par VincentL dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/10/2005, 16h13
  5. Accès aux propriétés ScrollBar d'un composant TMemo
    Par fausto dans le forum C++Builder
    Réponses: 2
    Dernier message: 10/10/2003, 11h08

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