Recherche dans ActiveDirectory

Résolu
cs_lostrailler Messages postés 26 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 29 septembre 2010 - 11 déc. 2006 à 11:41
cs_lostrailler Messages postés 26 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 29 septembre 2010 - 14 déc. 2006 à 08:53
Bonjour à tous.

Voilà j'ai un soucis que je n'arrive aps à résoudre. Je vais essayer d'être clair.

A partir du SamAccountName d'un utilisateur je dois récupérer son UID.

Seulement niveau requête sous Active Directory je n'y connait rien. J'ai essayer de faire un bout de code que voici plus bas mais il n'est pas du tout complet.

Je précise que j'ai plusieurs OU regroupant mes utilisateurs.
- OU Utilisateurs
            - OU1
            - OU2
            - ...

Le problème dans ce script c'est que je me trouve dans l'OU Utilisateurs et je suppose qu'avec ma requête je ne parcours pas mes sous OU.
De plus comment s'appelle le champ pour l'UID et pour le SamAccountName que j'ai besoin pour ma requete.
Si vous pouvez vraiment m'aider se serait vraiment super parceque j'ai l'impression que mon code n'est pas bon du tout. (Je me suis basé d'un code existant mais qui ne faisait pas du tout la même chose)

'Définition des constantes
const OU_USERS_MONDOMAINE= "ou=UTILISATEURS,dc=mondomaine"




On error Resume Next







'Ouverture du tableau Excel

Set appExcel = CreateObject("Excel.Application")
appExcel.Visible = True
appExcel.Workbooks.Open("C:\test.xls")







'Varaible définissant la ligne de recherche dans le fichier Excel

i = 2







'Connexion au domaine
Set OUsource = GetObject("LDAP://" & OU_USERS_MONDOMAINE)
'OUsource.Filter = Array("user")
searchpath = OUsource.ADsPath
Set Connection = CreateObject("ADODB.Connection")
Set Command = CreateObject("ADODB.Command")
Connection.Provider = "ADsDSOObject"
Connection.Open "Active Directory Provider"
Set  Command.ActiveConnection = Connection







'Recherche de l'UID à partir du SamAccountName

While appExcel.Cells(i, 1).value <> ""
        'Récupération du SamAccountName
        SAN = appExcel.Cells(i, 1).value
Je suppose que c'est là que je dois parcourir toutes mes OU mais comment ????
        Command.CommandText = "SELECT ??? FROM '" & searchpath & "' WHERE objectClass= 'user' AND  ??? = '" & SAN & "'"
        Set RecordSet = Command.Execute
        RecordSet.MoveFirst
        'Variable de la colonne
        j = 3
       'Récupération de tous les UID car il peut y avoir des SamAccountName identiques
        While Recordset.EOF = False
                appExcel.Cells(i, j).value = Recordset.Fields(" ??? ").value
                j = j + 1
                Recordset.MoveNext
        Wend
        i = i + 1
Wend




Merci d'avance.

9 réponses

cs_lostrailler Messages postés 26 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 29 septembre 2010
14 déc. 2006 à 08:53
C'est bon j'ai trouvé ;-)
Voilà comment j'ai fait

'Définition des constantes
const OU_USERS = "dc=MONDOMAINE"
Const ADS_SCOPE_SUBTREE = 2




On error Resume Next







'Ouverture du tableau Excel

Set appExcel = CreateObject("Excel.Application")
appExcel.Visible = True
appExcel.Workbooks.Open("C:\test.xls")







'Varaible définissant la ligne de recherche dans le fichier Excel

i = 2







'Connexion à l'Active Directory

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection







'Recherche de l'UID à partir du SamAccountName

While appExcel.Cells(i, 1).value <> ""
        'Récupération du SamAccountName
        SAN = appExcel.Cells(i, 1).value
        'Initialisation de la variable de la colonne
        j = 3
        'Création et exécution de la requête
        objCommand.CommandText = _
                "Select distinguishedName from " & _
                        "'LDAP://" & OU_USERS & "' where objectClass='user'" & _
                        " and samAccountName = '" & SAN & "'"
        objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
        Set objRecordSet = objCommand.Execute
       'On se place au premier enregistrement
        objRecordSet.MoveFirst
        'On parcours la liste et on rajoute l'UID
        Do Until objRecordSet.EOF
                user = objRecordSet.Fields("distinguishedName").value
                set objUser = GetObject("LDAP://" & user)
                appExcel.Cells(i, j).value = objUser.uid
                j = j + 1
                objRecordSet.MoveNext
        Loop
        i = i + 1
Wend

'Fermeture
objConnection.close
Set ibjUser = Nothing
Set objRecordSet = Nothing
Set objCommand = Nothing
Set appExcel = Nothing
3
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
11 déc. 2006 à 12:54
 Bonjour à tous

Un petit exemple ci-dessous:

Set net   = WScript.CreateObject("WScript.Network")
Set fso   = WScript.CreateObject("Scripting.FileSystemObject")
Set args  = WScript.Arguments



If args.Count = 0 Then
   computer = net.ComputerName
Else
   computer = args(0)
End If



Set GDict = WScript.CreateObject("Scripting.Dictionary")
Set UDict = WScript.CreateObject("Scripting.Dictionary")



Set GUset = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & Computer).InstancesOf _
            ("Win32_GroupUser")



For Each GU in GUset
    Set Group = GetObject("winmgmts:" & GU.GroupComponent)
    set User  = GetObject("winmgmts:" & GU.PartComponent)
    GName = Group.Name
    Uname = User.Name
    If GDict.Exists(GName) Then
       OldList = GDict.Item(GName)
       GDict.Item(GName) = OldList& "," & UName
    Else
       GDict.Add GName, UName
    End If



    If UDict.Exists(UName) Then
       OldList = UDict.Item(UName)
       UDict.Item(UName)=OldList& "," & GName
    Else
       UDict.Add UName, GName
    End If
Next



Dim GTabG,GtabU, UTabU, UTabG
GTabG = GDict.Keys
GtabU = GDict.Items
UTabU = UDict.Keys
UTabG = UDict.Items



jean-marc
0
cs_lostrailler Messages postés 26 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 29 septembre 2010
11 déc. 2006 à 13:45
Mais ton exemple ne traite pas directement avec l'AD.

En fait mon problème vient juste de là :

'Recherche de l'UID à partir du SamAccountName
While appExcel.Cells(i, 1).value <> ""
        'Récupération du SamAccountName
        SAN = appExcel.Cells(i, 1).value
Comment parcourir toutes mes OU appartenant à l'OU utilisateur pour exécuter la requete suivante dans chaque OU ?
        Command.CommandText = "SELECT ??? FROM '" & searchpath & "' WHERE objectClass= 'user' AND  ??? = '" & SAN & "'"
        Set RecordSet = Command.Execute
        RecordSet.MoveFirst
        'Variable de la colonne
        j = 3
       'Récupération de tous les UID car il peut y avoir des SamAccountName identiques
        While Recordset.EOF = False
                appExcel.Cells(i, j).value = Recordset.Fields(" ??? ").value
                j = j + 1
                Recordset.MoveNext
        Wend
        i = i + 1
Wend
0
leSaleGauSS Messages postés 148 Date d'inscription samedi 4 novembre 2006 Statut Membre Dernière intervention 4 décembre 2008
11 déc. 2006 à 19:05
En fait tu cherches à récupérer le Login de l'utilisateur qui se connecte ...

'Création d'une instance d'environnement pour connaître l'utilisateur actuel 
Set Shell = CreateObject("WScript.Shell" )
'Quel est le Logon de l'utilisateur ?
sUser = LCase(Shell.ExpandEnvironmentStrings("%USERNAME%" ))

... ou l'UO de l'utilisateur ? (moi j'ai pas compris )
Quand je suis là tout va mal  
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
leSaleGauSS Messages postés 148 Date d'inscription samedi 4 novembre 2006 Statut Membre Dernière intervention 4 décembre 2008
11 déc. 2006 à 19:11
Ah sinon tu peut aussi mettre des paramètres comme searchscope qui te permet de fouiller dans toutes l'arborescence de l'AD

searchpath = OUsource.ADsPath
Set Connection = CreateObject("ADODB.Connection")
Set Command = CreateObject("ADODB.Command")
Connection.Provider = "ADsDSOObject"
Connection.Open "Active Directory Provider"
Set  Command.ActiveConnection = Connection

Command.Properties("Searchscope") = 2
'pour plus d'infos sur cette propriété, les sites de microsoft et msdn existent

Quand je suis là tout va mal  
0
leSaleGauSS Messages postés 148 Date d'inscription samedi 4 novembre 2006 Statut Membre Dernière intervention 4 décembre 2008
12 déc. 2006 à 01:07
Pas de nouvelle, bonne nouvelle ?

Quand je suis là tout va mal  
0
cs_lostrailler Messages postés 26 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 29 septembre 2010
12 déc. 2006 à 08:36
Je vais tester ca ce matin ;-) je te tiens au courant.
Merci encore
0
cs_lostrailler Messages postés 26 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 29 septembre 2010
13 déc. 2006 à 08:24
Ca ne fonctionne pas, ces classes n'existent pas en VBS. JE vais continuer à chercher :'(
0
leSaleGauSS Messages postés 148 Date d'inscription samedi 4 novembre 2006 Statut Membre Dernière intervention 4 décembre 2008
14 déc. 2006 à 02:07
De quelle classe parles tu ? de la connection ou le shell ?

Quand je suis là tout va mal  
0
Rejoignez-nous