VBS et Active directory

Résolu
Makss Messages postés 384 Date d'inscription   Statut Membre -  
 pimoos -
Bonjour,

Je suis en stage, et pour passer mon temps libre (et oui, j'en ai...), j'essaye de faire un petit truc en VBS afin d'extraire des infos concernat tous les users dans l'active directory... Mais voila, je bute sur un truc et jm'en sort pas...
Ci dessous le code, ça plante à la ligne 33 avec une erreur notifiée "Provider"... Il n'y a encore rien au point vis à vis du fichier texte...
Merci!!!

' Extraction d'users de l'Active Directory

dim fso, MyFile, reptemp, filetext, oRecordSet

' LDAP du domaine
strDomainDN ="dc=******,dc=lan"

' Le répertoire c:\temp doit exister
reptemp="c:\temp\"
Filetext=Inputbox("fichier temporaire de l'OU cible : ")
Set fso = CreateObject("Scripting.FileSystemObject")

' création d'un fichier txt pour la première partie du script, soit le nom des utilisateurs
set MyFile = fso.CreateTextFile(reptemp + filetext + ".txt")

'Connexion
Set objDSE = GetObject("LDAP://rootDSE")
set objConn = CreateObject("ADODB.Connection")
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"

' Ici un filtre sur les utilisateurs, récupération des paramètres
strFilter = "(&(objectclass=user)(objectcategory=person));"
strAttrs = "givenName,SN,distinguishedName,userPrincipalName,mail,description"
strScope = "subtree"

'Requète
Requete = "<LDAP://" & objDSE.Get("defaultNamingContext") & ">;" & strFilter & strAttrs & strScope
WScript.Echo Requete

'Execution de la requète
Set oRecordSet = objConn.Execute(Requete)

prenom = oRecordset.Fields("givenName").Value
nom = oRecordset.Fields("SN").Value
UserDName = oRecordset.Fields("distinguishedName").Value
UserPName = oRecordset.Fields("userPrincipalName").Value
Email = oRecordset.Fields("mail").Value
Description = oRecordset.Fields("Description").Value

' extraction nom OU la plus basse
partie = split(UserDName,",")
OU = Right(partie(1),Len(partie(1))-3)
' extraction login user (a partir windows 2000)
partie = split(UserPName,"@")
login = partie(0)

' Affichage des infos recuperees
' ------------------------------
WScript.Echo "prenom: " & prenom _
& CRLF & "nom: " & nom _
& CRLF & "login: " & login _
& CRLF & "Email: " & Email _
& CRLF & "OU: " & OU _
& CRLF & "Description: " & Description

oConnection.Close
WScript.Quit

msgbox "fin de récupération des utilisateurs. Le fichiers texte est dans " + reptemp + Filetext + ".txt"

--
No amount of magic knobs will save a sopply designated network...
Configuration: Windows XP
Internet Explorer 6.0

1 réponse

  1. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    Salut,
    Y'a bien plus simple pour "scripter" ça....Regarde ici :
    https://docs.microsoft.com/en-us/
    http://www.microsoft.com/downloads/details.aspx?familyid=b4cb2678-dafb-4e30-b2da-b8814fe2da5a&displaylang=en
    ;)
    Tom
    0
    1. Makss
       
      Merci pour le lien, il est à noté!!
      Par contre, je veux extraire, des infos sur tous les users, et non sur un seul en particulier, et je ne trouve pas ce que j'veux... Enfin je testerai ça demain...
      0
      1. pimoos > Makss
         
        Voici un script que j'utilise pour faire la même chose, après faut juste ajouter les infos dont t'a besoin en ajoutant une ligne de ce genre par exemple :

        If Not IsEmpty(oUser.postalcode) Then
          OutPutFile.WriteLine "postalcode: " & oUser.postalcode
        End If
        


        L'intégralité du script est ici :

        'Global variables
        	Dim oContainer
        	Dim OutPutFile
        	Dim FileSystem
        'Initialize global variables
        	Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
        	Set OutPutFile = FileSystem.CreateTextFile("export.txt", True)
        	Set oContainer=GetObject("LDAP://DC=domaine,DC=local")
        'Enumerate Container
        	EnumerateUsers oContainer'Clean up
        	OutPutFile.Close
        	Set FileSystem = Nothing
        	Set oContainer = Nothing
        	WScript.Echo "Finished"
        	WScript.Quit(0)
                Sub EnumerateUsers(oCont)
        	Dim oUser
        	For Each oUser In oCont
        		Select Case LCase(oUser.Class)
        			Case "user"
        				If Not IsEmpty(oUser.distinguishedName) Then
        					OutPutFile.WriteLine "dn: " & oUser.distinguishedName
        				End If
        				If Not IsEmpty(oUser.name) Then
        					OutPutFile.WriteLine "name: " & oUser.Get ("name")
        				End If
        				If Not IsEmpty(oUser.streetAddress) Then
        					OutPutFile.WriteLine "streetAddress: " & oUser.streetAddress
        				End If
        				If Not IsEmpty(oUser.l) Then
        					OutPutFile.WriteLine "l: " & oUser.l
        				End If
        				If Not IsEmpty(oUser.st) Then
        					OutPutFile.WriteLine "st: " & oUser.st
        				End If
        				If Not IsEmpty(oUser.postalcode) Then
        					OutPutFile.WriteLine "postalcode: " & oUser.postalcode
        				End If
        			Case "organizationalunit", "container"
        				EnumerateUsers oUser
        		End Select
        	OutPutFile.WriteLine
        	Next
                End Sub
        
        
        0