VBS et Active directory

Résolu
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. Contributeur
    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. 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
    2. @MakssVoici 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