TUTOS.EU

Résoudre le login d'une liste de comptes AD en VBS

Ce script demandera en entrée le chemin d'un fichier qui contient une liste de comptes AD.
Pour chacun des comptes, le script cherchera le nom associé

Option Explicit

Dim MyDistinguishedName
Dim objRootDSE, objItem, objConnection, objCommand, objRecordSet
Dim strContainer, strname
Dim intCounter
Dim Resultat

Dim CheminScriptActuel, CheminFichier, ScriptFileName, MaLigne
Dim objFSO, objTextFile
Dim Position

strContainer = "" 'Si vous souhaitez vous connecter à une OU en particulié, indiquez la ici

Const ADS_UF_ACCOUNTDISABLE = 2 
Const ADS_SCOPE_SUBTREE = 2

'Declaration des constantes
Const ForReading = 1
Const ForWritting = 2
Const ForAppending = 8


ScriptFileName = wscript.scriptname
Position = InstrRev(ScriptFileName,".")
if (Position > 0) Then ScriptFileName = Left(ScriptFileName, Position - 1)
ScriptFileName = ScriptFileName & "_Liste.txt"

CheminScriptActuel = Left(wscript.scriptfullname,Len(wscript.scriptfullname)-Len(wscript.scriptname)-1)
CheminFichier = InputBox("Entrez le chemin du fichier","Chemin du fichier",CheminScriptActuel & "\" & ScriptFileName)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile(CheminFichier, ForReading, True)


On Error Resume Next
Set objRootDSE = GetObject("LDAP://rootDSE")
If strContainer = "" Then
  Set objItem = GetObject("LDAP://" & objRootDSE.Get("defaultNamingContext"))
Else
  Set objItem = GetObject("LDAP://" & strContainer & "," & _
    objRootDSE.Get("defaultNamingContext"))
End If
On Error Goto 0

'strname = objItem.Get("name")
'WScript.Echo "name: " & strname

MyDistinguishedName = objItem.Get("distinguishedName") 'Récupération du distinguishedName du domaine par défaut. Exemple DC=Cotonso,DC=Com
'WScript.Echo "distinguishedName: " & MyDistinguishedName

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

objCommand.Properties("Page Size") = 10000
objCommand.Properties("Timeout") = 30
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.Properties("Cache Results") = False

'Pour toutes les lignes du fichier
Do Until objTextFile.AtEndOfStream
	MaLigne = objTextFile.Readline 'Lecture et affichage de la ligne
	'Wscript.Echo MaLigne
	
	Resultat = MaLigne
	
	'objCommand.CommandText = "<LDAP://" & MyDistinguishedName & ">;(objectCategory=User);name,cn,displayName,sn,sAMAccountName,distinguishedName;subtree"
	objCommand.CommandText = "<LDAP://" & MyDistinguishedName & ">;(&(objectCategory=User)(sAMAccountName=" & MaLigne & "));name,cn,displayName,sn,sAMAccountName,distinguishedName;subtree"
	
	Set objRecordSet = objCommand.Execute 
	intCounter = 0 
	Do Until objRecordset.EOF 
		'WScript.echo objRecordset.Fields("distinguishedName")
		'WScript.echo "Name : " & VbTab & objRecordset.Fields("Name")
		'WScript.echo VbTab & "cn : " & VbTab & objRecordset.Fields("cn")
		'WScript.echo VbTab & "displayName : " & VbTab & objRecordset.Fields("displayName")
		'WScript.echo VbTab & "sn : " & VbTab & objRecordset.Fields("sn")
		'WScript.echo VbTab & "sAMAccountName : " & VbTab & objRecordset.Fields("sAMAccountName")
		'WScript.echo VbTab & "distinguishedName : " & VbTab & objRecordset.Fields("distinguishedName")
		Resultat = Resultat & vbtab & objRecordset.Fields("Name")
		intCounter = intCounter + 1 
		objRecordset.MoveNext 
	Loop 
	
	If intCounter = 0 Then
		Resultat = Resultat & " : pas de résultat"
	End If
	WScript.echo Resultat
	
Loop

objTextFile.Close
Set objTextFile = Nothing
Set objFSO = Nothing


objConnection.Close
Lien vers le fichier : cliquez ici