begin process at 2008 07 05 15:28:52
1 205 222 membres
196 nouveaux aujourd'hui
14 119 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Recherche dans ActiveDirectory [ Langages dérivés / VBScript ] (lostrailler)

Recherche dans ActiveDirectory le 11/12/2006 11:41:46

lostrailler

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.


Re : Recherche dans ActiveDirectory le 11/12/2006 12:54:24

JMO
Membre Club



 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


Re : Recherche dans ActiveDirectory le 11/12/2006 13:45:06

lostrailler
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


Re : Recherche dans ActiveDirectory le 11/12/2006 19:05:34

leSaleGauSS
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  


Re : Recherche dans ActiveDirectory le 11/12/2006 19:11:16

leSaleGauSS
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  


Re : Recherche dans ActiveDirectory le 12/12/2006 01:07:18

leSaleGauSS
Pas de nouvelle, bonne nouvelle ?

Quand je suis là tout va mal  


Re : Recherche dans ActiveDirectory le 12/12/2006 08:36:54

lostrailler
Je vais tester ca ce matin ;-) je te tiens au courant.
Merci encore

Re : Recherche dans ActiveDirectory le 13/12/2006 08:24:20

lostrailler
Ca ne fonctionne pas, ces classes n'existent pas en VBS. JE vais continuer à chercher :'(

Re : Recherche dans ActiveDirectory le 14/12/2006 02:07:44

leSaleGauSS
De quelle classe parles tu ? de la connection ou le shell ?

Quand je suis là tout va mal  


Re : Recherche dans ActiveDirectory le 14/12/2006 08:53:20

lostrailler
Réponse acceptée !

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



Classé sous : set, connection, command, appexcel, samaccountname

Participer à cet échange

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€
creation de marque et ...
Budget : 1 000€

Snippets en rapport

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS