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 6 et antérieur Discussion :

Lire le Active Directory


Sujet :

VB 6 et antérieur

  1. #1
    Membre éclairé Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Par défaut Lire le Active Directory
    Bonjour

    Je programme en vb6

    J'essaie de lire dans le Active Directory et je n'y arrive pas.

    J'ai tout d'abord trouver ce code quelque part sur le net qui permet d'aller lire les informations d'un user particulier :

    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
    Public Function UserInfo(LoginName As String) As String
     
    'Déclaration des variables locales
    Dim oRoot as IADs
    Dim oDomain as IADs
    Dim sDomain as String
    Dim sBase as String
    Dim sFilter as String
    Dim sAttribs as String
    Dim sDepth as String
    Dim conn As New ADODB.Connection
     
    Set oRoot = GetObject("LDAP://rootDSE")
    sDomain = oRoot.Get("defaultNamingContext")
    Set oDomain = GetObject("LDAP://" & sDomain)
    sBase = "<" & oDomain.ADsPath & ">"
    sFilter = "(&(objectCategory=person)(objectClass=user)(name=" _
      & LoginName & "))"
    sAttribs = "adsPath"
    sDepth = "subTree"
    sQuery = sBase & ";" & sFilter & ";" & sAttribs & ";" & sDepth
     
    conn.Open _
      "Data Source=Active Directory Provider;Provider=ADsDSOObject"
     
    Set rs = conn.Execute(sQuery)
     
    If Not rs.EOF Then
        Set user = GetObject(rs("adsPath"))
        With user
              sAns = "First Name: " & .FirstName & vbCrLf
             ........
    End With
    End If
    UserInfo = sAns
    End Function
    Je peux ensuite appeller la fonction ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox UserInfo("administrator")
    Comme ca, ça fonctionne très bien.

    Cependant tout ce beau code permet de se connecter au dossier par defaut "user". Mais les usagers de ma compagnie sont dans le cn=macieuser

    Je suis donc aller chercher le contenu de la variable sDomain et j'ai qu'elle était ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sDomain = "dc=macie, dc=com"
    Je me suis dis que j'allais simplement rajouter la clause "cn=macieuser" dans le string en asignant ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sDomain = "cn=macieusers, dc=macie, dc=com"
    mais ainsi, je recois le message d'erreur

    Automation Error. There is no such object on the server.
    Si j'essaie cet ordre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sDomain = "dc=macie, cn=macieusers, dc=com"
    je recois ce message d'erreur

    Automation error. A referral was returned from the server.


    Est-ce que quelqu'un dans la salle sait comment changer le string du domain pour que je puisse aller lire dans le dossier "macieusers"?

    Merci à l'avance 8)

  2. #2
    Membre éclairé Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Par défaut
    Il n'y a personne qui travaille avec Active Directory?

    Franchement ça m'étonne mais c'est également possible...

  3. #3
    Membre éclairé Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Par défaut
    Bonjour je viens faire un petit update, si jamais quelqu'un tombe sur ce thread à propos d'Active Directory ça pourrait les intéresser...

    J'ai trouvé sur MSDN un autre moyen d'accéder à Active Directory via SQL Server.

    Voici le code VB6

    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
     
    Dim test As ADODB.Recordset
    Dim lRecordAffected As Long
    Dim ErrNumber As Long
    Dim ErrDescription As String
    Dim tblRetour As Variant
     
    Set con = New clsConnection
    If con.Connected Then con.Disconnect
    con.SetPlatform ptActiveDirectory, "", "", "", ""
    con.Connect
     
    Set test = con.Execute("SELECT un, Name, title, telephoneNumber From 'LDAP://DC=lassonde, DC=COM' WHERE objectClass='user' AND objectCategory='Person'", lRecordAffected, ErrNumber, ErrDescription)
     
    tblRetour = test.GetRows(-1)
    En gros ce que je fais c'est que je me connecte a SQLServer avec ce ConnectionString ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Provider=ADSDSOObject;User Id=" & NewUserID & "; Password=" & NewPassword & ";"
    et j'exécute ensuite la requête.

    Cela fonctionne très bien. J'ai tous les noms, titre et numéro de telephone des usagers.

    Mon problème est ici, nous ne savons pas quels sont les noms de colonnes permettant d'accéder à toutes les datas disponibles sur les usagers. Si je veux par exemple accéder au UserName de l'usager, j'ai beau essayer "username" ou "employeID" cela ne fonctionne pas. Ça me retourne

    Unspecified error


    J'ai également essayé de faire un select * ... ca retourne un champ contenant les infos générals des usagers sous ce format :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "LDAP://CN=Guest,CN=Users,DC=macie,DC=com"
    On ne s'en sort donc pas!

    J'en suis donc rendu là, si jamais quelqu'un a une idée pour trouver les foutu nom de colonne qui me permettraient de lire les infos complete par usager, ca serait gentil de m'en faire part.


  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 19
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sDomain = "cn=macieusers, dc=macie, dc=com"
    essaies plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sDomain = "OU=macieusers, dc=macie, dc=com"
    je ne pense pas que tuaies fait un conteneur pour tes users, ormis si c'est l"users d'origine, je pense plutot à une organistaion unit


    moi j'ai fait ca pour la recherche d'utilisateur :

    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
       Public Function FindUser()
            'Fonction de recherche de l'utilisateur
            'Renvoie du texte
     
            Dim cn
            Dim cmd
            Dim rs
     
            On Error Resume Next
            Err.Clear()
     
            cn = CreateObject("ADODB.Connection")
            cmd = CreateObject("ADODB.Command")
            rs = CreateObject("ADODB.Recordset")
     
            cn.open("Provider=ADsDSOObject;")
     
            cmd.activeconnection = cn
            cmd.commandtext = "SELECT ADsPath FROM 'LDAP://" & DomainName & "' WHERE sAMAccountName = '" & username & "'"
     
            rs = cmd.execute
     
            If Err.Number <> 0 Then
                Return "Error connecting to Active Directory Database:" & Err.Description
            Else
                If Not rs.BOF And Not rs.EOF Then
                    rs.MoveFirst()
                    Return "Trouve"
                Else
                    Return "Not Found"
                End If
            End If
            cn.close()
      End Function
    tu peux toujours essayer

Discussions similaires

  1. [AC-2007] VBA - lire un active directory
    Par Mammy Potter dans le forum VBA Access
    Réponses: 4
    Dernier message: 11/08/2011, 08h20
  2. Lire des champs Active Directory
    Par skypi dans le forum ASP.NET
    Réponses: 2
    Dernier message: 23/07/2009, 13h52
  3. [C#] Active directory LDAP
    Par Gauden dans le forum Windows Forms
    Réponses: 9
    Dernier message: 02/05/2005, 13h57
  4. Réponses: 4
    Dernier message: 17/05/2004, 09h57
  5. Active directory
    Par m.schar dans le forum Développement
    Réponses: 5
    Dernier message: 22/03/2004, 10h30

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