VBS et Active directory

Résolu/Fermé
Makss Messages postés 385 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 3 avril 2009 - 2 avril 2008 à 16:52
 pimoos - 22 févr. 2009 à 01:05
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"


A voir également:

1 réponse

tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
2 avril 2008 à 18:58
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
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
pimoos > Makss
22 févr. 2009 à 01:05
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