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 :

Active Directory - Recherche de l'attribut Profile Path


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 18
    Par défaut Active Directory - Recherche de l'attribut Profile Path
    Bonjour,

    Je débute (c'est bien le cas de le dire) en Visual Studio 2008 et souhaiterais développer une petit programme en VB qui m'affiche le chemin du profile d'un utilisateur.
    J'ai beau regardé depuis plusieurs jours sur différents sites (et pourtant il y a de bons tutos au sujet de l'AD), mais je n'arrive pas à créer mon code. En réalité je n'y comprends rien.

    Voici comment se présente ma FORM:

    1 textbox (textbox1) dans laquelle j'introduis le matricule de l'utilisateur (champ user logon name dans l'active directory)
    1 button (command1) qui me permet de lancer le recherche
    1 textbox (textbox2) dans laquelle doit venir s'afficher le chemin du profile de l'utisateur recherhé (champ profile path dans l'active directory)

    Au début de mon code, j'appelle le System.DirectoryServices comme ceci:
    Imports System.DirectoryServices

    Et après c'est le néant

    Je sais que j'en demande beaucoup, mais il me faudrait une aide de A à Z.

    Qn pourrait-il m'aider?

    Merci d'avance

  2. #2
    Membre expérimenté Avatar de Saintelaitlait
    Homme Profil pro
    Responsable ServiceDesk
    Inscrit en
    Août 2011
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable ServiceDesk
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 179
    Par défaut
    Bonjour,

    Je vais te filer une fonction que j'utilise pour récupérer des infos dans l'AD.

    Pense à ajouter ces références à ton projet( clic droit sur ta solution -> ajouter une référence -> .NET)

    - System.Management
    - System.DirectoryServices

    Je me souvien pas si management est utile mais bon elle est la

    Alors voici le monstre :
    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
     
     
        Public Function XPReqActiveDir(ByVal StrLogname As String, ByVal StrPropriete As String) As String
     
            Try
     
                Dim mydirentry As New DirectoryEntry("LDAP://OU=Utilisateurs,DC=PROD,DC=XXX")
                Dim searcher As New DirectorySearcher(mydirentry)
                Dim StrRetADInfo As String = ""
     
                searcher.PropertiesToLoad.Add(StrPropriete)
                searcher.Filter = "(anr=" & StrLogname & ")"
     
                Dim results As SearchResultCollection
                results = searcher.FindAll()
     
                For Each result as SearchResult In results
                    StrRetADInfo = (result.Properties(StrPropriete)(0)).ToString
                Next
     
                Return StrRetADInfo
     
     
     
            Catch ex As Exception
     
                Dim StrErreur As String = "Aucune information trouvée"
                Return StrErreur
     
            End Try
     
        End Function
    Tu apelle cette fonction en lui passant premièrement le logon de ton usager, et deuxièment l'attribut que tu veux chercher.
    La liste des attributs est disponible ici -> http://www.computerperformance.co.uk..._directory.htm

    Si tu veux plus d'explications tu n'as qu'a demandé

    Bonne chance

  3. #3
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 18
    Par défaut
    Merci pour ta réponse Saintelaitlait

    Voici mon code avec des petites modifs (voir Dim mydirentry... et Dim searcher .

    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
     
    Option Explicit On
     
    Imports System.Management
    Imports System.DirectoryServices
    Imports System.DirectoryServices.AccountManagement
     
    Public Class Form1
     
        Public Function Search_User_Informations(ByVal StrLogname As String, ByVal StrPropriete As String) As String
     
            Try
     
                Dim mydirentry As New DirectoryEntry("LDAP://rootDSE")
                Dim searcher As New DirectoryEntry("LDAP://" + DirectCast(mydirentry.Properties("defaultNamingContext").Value, String))
     
                'Dim mydirentry As New DirectoryEntry("LDAP://OU=Utilisateurs,DC=PROD,DC=XXX")
                'Dim searcher As New DirectorySearcher(mydirentry)
     
                Dim StrRetADInfo As String = ""
     
                searcher.PropertiesToLoad.Add(StrPropriete)
                searcher.Filter = "(anr=" & StrLogname & ")"
     
                Dim results As SearchResultCollection
                results = searcher.FindAll()
     
                For Each result As SearchResult In results
                    StrRetADInfo = (result.Properties(StrPropriete)(0)).ToString
                Next
     
                Return StrRetADInfo
     
     
     
            Catch ex As Exception
     
                Dim StrErreur As String = "Aucune information trouvée"
                Return StrErreur
     
            End Try
     
        End Function
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            'Call Search_User_Informations("")
        End Sub
     
        Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
     
        End Sub
    End Class
    Il n'y a pas grand chose et le peu qu'il y a doit être faux. Là, je me sens comme un enfant au volant d'une Ferrari

    Peux-tu m'aider?

    Autre question: Comment récupérer la valeur (matricule de l'utilisateur) de la textbox1, de l'introduire dans ton code et de lancer la recherche?

    Merci pour ta patience

  4. #4
    Membre expérimenté Avatar de Saintelaitlait
    Homme Profil pro
    Responsable ServiceDesk
    Inscrit en
    Août 2011
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable ServiceDesk
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 179
    Par défaut
    Hello,


    Petit problème avant de commencer, tu n'a pas déclaré ton directorySearcher. Tu déclares deux directoryentry un à la suite de l'autre.

    Deuxièmement j'vais t'expliquer. Je vais commenter ton code

    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
    Option Explicit On
     
    Imports System.Management
    Imports System.DirectoryServices
    Imports System.DirectoryServices.AccountManagement
     
    Public Class dude
     
        Public Function Search_User_Informations(ByVal StrLogname As String, ByVal StrPropriete As String) As String
     
            Try
     
                Dim mydirentry As New DirectoryEntry("LDAP://rootDSE")
     
                'La ligne suivante devrait pas plutôt ressembler a celle que j'ai mis en commentaire dessous?
                Dim searcher As New DirectoryEntry("LDAP://" + DirectCast(mydirentry.Properties("defaultNamingContext").Value, String))
                'Dim searcher As New DirectorySearcher(mydirentry)        
     
                Dim StrRetADInfo As String = ""
     
                'Ici tu spécifie laquelle propriété tu veux chercher. Si tu en chercher plusieurs, fait d'autre .add()
                searcher.PropertiesToLoad.Add(StrPropriete)
                'Ici tu spécifie le filtre de ton searcher, la condition si tu veux.
                searcher.Filter = "(anr=" & StrLogname & ")"
     
                'Ici on déclare la variable qui va contenir les résultats, qui sont une collection
                Dim results As SearchResultCollection
                'On dit a notre searcher de trouver tout ce qui concorde avec les propertiesToLoad et notre Filter.
                'On stock la collection renvoyé par le searcher dans results
                results = searcher.FindAll()
     
                'On explore la collection avec un for each. Cela te permet d'avoir accès aux propriétés des membres de
                'la collection sans devoir travailler avec les indices du tableau.
                For Each result As SearchResult In results
                    'result représente un item dans la collection qu'est results
                    'chaque item de la collection a un attribut Properties, qui est un tableau avec les
                    'résultat de la recherche.On utilise la variable strPropriete pour que ce soit dynamique.
                    'Imagine que ca donne :(properties(profilePath)(0) lorsque strPropriete vaut "profilePath".
                    'C'est donc un tableau à deux dimensions. L'axe des x est représenté 
                    'par les propriété que tu cherche, et l'Axe des y ce sont les infos relatives à chaque propriétés
                    StrRetADInfo = (result.Properties(StrPropriete)(0)).ToString
                Next
                'Ensuite tu retourne la valeur que tu as trouvé.
                Return StrRetADInfo
     
     
     
            Catch ex As Exception
     
                Dim StrErreur As String = "Aucune information trouvée"
                Return StrErreur
     
            End Try
     
        End Function
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
        End Sub
     
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            'Tu met la valeur de ton textbox comme ceci
            'Tu devrait par contre vérifier si tonTextBox.text vaut quelque chose avant ;)
            'Tu affecte la valeur a ton textbox de destination comme ceci.
            'Comme c'est une fonction elle retourne quelque chose, tu peux donc t'en servir de cette manière
            tonTextBoxDeDestination.text = Search_User_Informations(tonTextBox.text, "profilePath")
        End Sub  
      Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
     
        End Sub
    End Class
    Hésite pas si ta d'autre question! Ca fait toujours plaisir d'aider

    Bonne chance

  5. #5
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 18
    Par défaut
    Merci Saintelaitlait.

    Grâce à tes commentaires, c'est déjà plus claire

    J'ai inséré ton code mais Visual Studio m'affiche les erreurs suivantes:

    'PropertiesToLoad' is not a member of 'System.DirectoryServices.DirectoryEntry'.
    'Filter' is not a member of 'System.DirectoryServices.DirectoryEntry'
    'FindAll' is not a member of 'System.DirectoryServices.DirectoryEntry'
    J'ai pourtant bien référencé System.Management, System.DirectoryServices et System.DirectoryServices.AccountManagement

    Une idée?

    A+++

  6. #6
    Membre expérimenté Avatar de Saintelaitlait
    Homme Profil pro
    Responsable ServiceDesk
    Inscrit en
    Août 2011
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable ServiceDesk
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 179
    Par défaut
    Je vais maintenant jouer au professeur et te reprimander en disant que tu n'as pas lu les commentaires que j'ai écrit dans le code!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    'La ligne suivante devrait pas plutôt ressembler a celle que j'ai mis en commentaire dessous?
                Dim searcher As New DirectoryEntry("LDAP://" + DirectCast(mydirentry.Properties("defaultNamingContext").Value, String))
                'Dim searcher As New DirectorySearcher(mydirentry)
    Si tu as laissé mon code tel quel, tu n'a pas de directorySearcher de déclaré. Seulement deux directoryEntry. Fait ce que disent les commentaires dans le code et tu devrait t'en sortir

  7. #7
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 18
    Par défaut
    Merci Saintelaitlait.
    Je vérifierai cela lundi au boulot.
    Encore merci pour tes explications

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

Discussions similaires

  1. [PowerShell] requete active directory, recherche user par nom OU prenom OU displayname etc
    Par gretch dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 01/08/2014, 14h23
  2. LDAP/Active Directory : recherche d'unicité
    Par dark.jabberwock dans le forum Administration système
    Réponses: 0
    Dernier message: 08/01/2013, 11h00
  3. [LDAP] Résultat vide après recherche sur Active Directory
    Par crashyear dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 23/10/2006, 17h40
  4. [VBS] recherche OU d'un utilisateur dans Active directory
    Par Amandine62 dans le forum VBScript
    Réponses: 7
    Dernier message: 16/02/2006, 08h42
  5. [VB.NET] Recherche Info dans Active Directory
    Par Vlat dans le forum Windows Forms
    Réponses: 2
    Dernier message: 30/12/2005, 15h29

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