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

VB.NET Discussion :

lister les utilisateurs d'une OU d'Active Directory


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 64
    Points : 37
    Points
    37
    Par défaut lister les utilisateurs d'une OU d'Active Directory
    Après plusieures tentatives pour afficher dans une comboBox la liste des utilisateurs présents dans une OU d'Active Directory, je n'y arrive toujours pas.

    Je vous mets ici le fonction que j'ai faite au début du script (sous visual studio 2005)

    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
    Public Function getUsersOU(ByVal monCheminLdapRecherche As String, _
                                   ByVal monUsername As String, _
                                   ByVal monpassword As String) As ArrayList
     
            ' ArrayList qui va contenir le résultat retourné par la recherche
            Dim maListeUsers As New ArrayList
     
            Try
     
                ' Instanciation d'un objet DirectorySearcher
     
                ' Définition de l'emplacement de recherche
                Dim monEmplacementRecherche As New DirectoryEntry("LDAP://" & _
           monCheminLdapRecherche, monUsername, monpassword, AuthenticationTypes.Secure)
     
     
                Dim maRecherche As New DirectorySearcher(monEmplacementRecherche)
     
                ' dureeMax initisalisée à 25 secondes
                Dim dureeMax As New TimeSpan(0, 0, 25)
     
                ' Emplacement où la recherche doit être effectuée 
                ' dans la hiérarchie Active Directory
                maRecherche.SearchRoot = monEmplacementRecherche
     
                ' Définition du Scope de la recherche, ici le conteneur 
                ' seulement et tous ses "sous conteneur"
                maRecherche.SearchScope = SearchScope.Subtree
     
                ' Filtre uniquement les objets de type "user"
                maRecherche.Filter = "(objectClass=user)"
     
                ' Détermination de la propriété à récupérer lors de la recherche
                maRecherche.PropertiesToLoad.Add("sAMAccountName")
     
                ' Durée maximum de la recherche
                maRecherche.ServerTimeLimit = dureeMax
     
                ' Fixe le nombre maximum d'objets retournés
                maRecherche.SizeLimit = 1500
     
                Dim unUtilisateur As DirectoryServices.SearchResult
     
                ' Récupération du 'sAMAccountName' des utilisateurs récupérés
                For Each unUtilisateur In maRecherche.FindAll()
                    maListeUsers.Add(unUtilisateur.GetDirectoryEntry.Properties.Item("sAMAccountName").Value.ToString)
                Next
     
                monEmplacementRecherche.Close()
     
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
     
            Return maListeUsers
     
        End Function
    Et le code de ma comboBox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Private Sub CbBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CbBox2.SelectedIndexChanged
            CbBox2.DroppedDown = True
     
                Dim listeUserOU As ArrayList = getUsersOU("OU=Utilisateurs,DC=societe,DC=fr", "login", "motdepasse")
                For Each nom As String In listeUserOU
                    CbBox2.Items.Add(nom)
                Next
        End Sub

    Il n'y a aucune erreur de générée par contre il n'y a rien dans la comboBox. Vu que je n'ai pas les conditions optimals pour réaliser ces tests, il se peut que cela vienne du login et mot de passe du compte ayant les droits ???????

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Slt,

    ta fonction getUser est correcte.
    Pour le sub combobox, tu le fait quand tu change de index (evenement). Pourquoi tu rempli pas ton combobox dans la function getuser directement.

    Pour savoir si récupère bien les logins des comptes AD. Tu lance en mode debug, tu met un pts d'arret à cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monEmplacementRecherche.Close()
    Dans les fenetres du debuggage, tu regardes l'objet maListeUsers. Regarde le nombre d'élément. Tu peux meme regarder l'élément à un certain indice.

    voila.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 64
    Points : 37
    Points
    37
    Par défaut
    Ma version est visual studio 2005 Express.

    Peux-tu m'expliquer un peut ce mode de debug car je ne vois pas trop. J'ai pourtant un petit livre sur VB 2005 mais on dirai qu'il n'y a pas toutes les options

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Reslt,

    je travail sur visual studio 2005 en anglais.

    Le debug s'éxécute en pressant sur F5.
    Sinon c'est dans le menu Debug> Start debugging.

    Sinon as-tu essayé de mettre ta fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim listeUserOU As ArrayList = getUsersOU("OU=Utilisateurs,DC=societe,DC=fr", "login", "motdepasse")
                For Each nom As String In listeUserOU
                    CbBox2.Items.Add(nom)
                Next
    dans l'évenement page load()?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 64
    Points : 37
    Points
    37
    Par défaut
    Pour le débug je vois, d'ailleurs il n'y a aucun pb, c'est pour les points d'arrets que je ne vois pas.

    Quesque l'événement page load() ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    pour mettre un point d'arrete tu clique sur la ligne et tu appuie sur F9. Ou cliquer au bord à gauche de la ligne. Un point d'arret marron s'affichera.

    Pour le page load, j'ai pas vu que tu developpes en C#. Donc il y en a pas je crois ( page_load() en vb.net, projet web).

    En fait le page_load, il faut trouver l'évenement similaire en C#, c'est l'évenement qui se déclenche quand tu démarres l'appli. Ca doit être un truc du genre form load, on load... à trouver.

    Voila

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 64
    Points : 37
    Points
    37
    Par défaut


    je ne développe pas en c# mais en vb (enfin j'essai)

    Pour les points d'arret, j'arrive bien à les placer, ce n'est pas le pb, mais apres je lance le débug et la rien ne se passe, mon programme se lance ....

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    oui lol excuse moi c'est bien du vb en windows app.
    moi je developpe en vb en web app.

    Donc tu arrives a mettre les points d'arrets. Si ca s'arrete pas au pts, ca veut dire que la fonction getuser ne s'execute pas, vérifie que tu entres dans cette fonction.. Tu n'a pas un bouton pour dire que là je veux remplir ma combobox?

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 64
    Points : 37
    Points
    37
    Par défaut
    J'ai essayer de mettre dans ma comboBox directement le résultat de ma fonction mais toujours rien ne s'affiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CbBox2.Items.Add(getUsersOU("OU=Utilisateurs,DC=societe,DC=fr", "login", "motdepasse"))

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    garde la fonction initale de remplissage de la combobox.

    Moi je pense plutot que tu n'exécute pas et tu n'entre pas dans la fonction getuser. Je te propose donc de créer un bouton, à l'évènement du click de ce bouton, tu met ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim listeUserOU As ArrayList = getUsersOU("OU=Utilisateurs,DC=societe,DC=fr", "login", "motdepasse")
    For Each nom As String In listeUserOU
                    CbBox2.Items.Add(nom)
    Next
    Si cela marche, tu pourra mettre ce code dans l'even de l'iniitialisation de l'appli.

    Je suis sur un projet qui demande aussi l'interrogation de l'AD. Je récupère bien le login, mail, prenom et nom. Moi je récupère cela au click d'un bouton.

    Voila peut tu mettre tes autres fonction/procedure?

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Slt,

    J'etait déjà sûr que la fonction getuser marche. Et la je confirme, je viens de copier coller ta fonction getuser dans mon appli (class déclarer en module). J'ai mis mon lien ldap, login et pass. Je récupère effectivement tous les logins de l'AD dans l'arraylist. Ta fonction
    marche bien.

    Voila

  12. #12
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 64
    Points : 37
    Points
    37
    Par défaut
    j'ai fait comme tu m'a dit et lorsque j'appuie sur le bouton, il me mets : THERE IS NO SUCH OBJECT ON THE SERVER. Il doit y avoir un problème dans mon chemin LDAP ou mon couple login/mot de passe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim listeUserOUArcole As ArrayList = getUsersOU("OU=test,OU=Utilisateurs,DC=masociete,DC=ouest,DC=fr", "login", "motdepasse")

    Sinon j'ai une autre fonction pour changer le nom de mon ordi mais ca ne fonctionne qu'avec le nom Netbios :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Declare Function SetComputerName Lib "kernel32" Alias "SetComputerNameA" (ByVal lpComputerName As String) As Long
     
        Public Function ChangerNomOrdi(ByVal NouveauNomOrdi As String) As Boolean
            On Error Resume Next
            Dim Changer As Long
            Changer = SetComputerName(NouveauNomOrdi)
            If Err.Number = 0 Then
                ChangerNomOrdi = True
            Else
                ChangerNomOrdi = False
            End If
        End Function
    Une autre pour récupérer les comptes utilisateurs contenus dans une OU :

    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
    Public Function getUsersOU(ByVal monCheminLdapRecherche As String, _
                                   ByVal monUsername As String, _
                                   ByVal monpassword As String) As ArrayList
     
            ' ArrayList qui va contenir le résultat retourné par la recherche
            Dim maListeUsers As New ArrayList
     
            Try
     
                ' Instanciation d'un objet DirectorySearcher
     
                ' Définition de l'emplacement de recherche
                Dim monEmplacementRecherche As New DirectoryEntry("LDAP://" & _
    			    monCheminLdapRecherche, monUsername, monpassword, AuthenticationTypes.Secure)
     
                Dim maRecherche As New DirectorySearcher(monEmplacementRecherche)
     
                ' dureeMax initisalisée à 25 secondes
                Dim dureeMax As New TimeSpan(0, 0, 25)
     
                ' Emplacement où la recherche doit être effectuée 
                ' dans la hiérarchie Active Directory
                maRecherche.SearchRoot = monEmplacementRecherche
     
                ' Définition du Scope de la recherche, ici le conteneur 
                ' seulement et tous ses "sous conteneur"
                maRecherche.SearchScope = SearchScope.Subtree
     
                ' Filtre uniquement les objets de type "user"
                maRecherche.Filter = "(objectClass=user)"
     
                ' Détermination de la propriété à récupérer lors de la recherche
                maRecherche.PropertiesToLoad.Add("sAMAccountName")
     
                ' Durée maximum de la recherche
                maRecherche.ServerTimeLimit = dureeMax
     
                ' Fixe le nombre maximum d'objets retournés
                maRecherche.SizeLimit = 1500
     
                Dim unUtilisateur As DirectoryServices.SearchResult
     
                ' Récupération du 'sAMAccountName' des utilisateurs récupérés
                For Each unUtilisateur In maRecherche.FindAll()
                    maListeUsers.Add(unUtilisateur.GetDirectoryEntry.Properties.Item("sAMAccountName").Value.ToString)
                Next
     
                monEmplacementRecherche.Close()
     
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
     
            Return maListeUsers
     
        End Function

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    ok, il entre dans ta fonction, tu utilises un win 2003 server? ou autre?

    Car il ne trouve pas l'attribut sAMAccountName...

    Tu peux remplacer sAMAccountName par cn ou sn..

    Moi en local j'utilise ADAM car je developpe sous win xp et je n'ai pas de serveur d'annuaire AD, l'attribut sAMAccountName n'existe pas, je dois prendre l'attribut cn pour le login.

    Et en ligne chez le client (win 2k3 serveur), c'est l'attribut sAMAccountName pour récupérer le login.

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/06/2013, 13h39
  2. Lister les groupes d'une OU d'Active Directory
    Par rixxou dans le forum VBScript
    Réponses: 0
    Dernier message: 09/06/2011, 16h55
  3. Lister les utilisateur d'une OU sous un Active Directory 2003
    Par nawfal_saber dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 24/05/2011, 10h23
  4. Lister les utilisateurs d'une machine
    Par Le_Suisse dans le forum Langage
    Réponses: 0
    Dernier message: 24/10/2008, 10h37
  5. [ADSI] Lister les utilisateurs d'une OU
    Par Julien.alkaza dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/02/2008, 14h06

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