Questo script permette di interrogare Active Directory al fine di creare un elenco degli utenti e dei gruppi di cui essi sono rispettivamente membri (i valori risulteranno separati da tabulazione).
La ricerca degli oggetti utente non deve necessariamente interessare l’intero dominio dal momento che lo script prevede la possibilità di limitarla ad una determinata unità organizzativa e ad uno specifico numero di sottolivelli (profondità della ricerca) all’interno di essa.
E’ necessario specificare correttamente il BaseDN in formato LDAP (per farlo dovete aver chiaro il concetto di percorso LDAP [1]), questa impostazione è assolutamente necessaria poiché identifica la base di partenza per la ricerca. Per approfondimenti su LDAP leggete LDAP per Amministratori Active Directory [2].
Lo script non gestisce in maniera autonoma le operazioni di scrittura dei risultati su file perciò vi consiglio di eseguirlo per mezzo del prompt dei comandi utilizzando il motore WSH “cscript.exe”, in questo modo potrete reindirizzarne facilmente l’output in un file di testo.
cscript.exe list_all_users_membership_within_an_ou_and_subous.vbs > output.txt
ADS_SCOPE_SUBTREE e la query che trovate a riga 19 sono le uniche variabili da modificare nel codice sorgente.
N.B: Lo script non riporta il "Primary Group" degli utenti, in condizioni normali questo valore è sempre uguale a "Domain Users"
'ADS_SCOPE_SUBTREE specifies the depth of the search operation performed against the BaseDN
'I suggest you to use cscript.exe from a command prompt to redirect the output of this script on a text file
On Error Resume Next
'Set here the depth of the search operation performed against the BaseDN
Const ADS_SCOPE_SUBTREE = 2
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.CommandText = _
"SELECT Name,memberOf FROM 'LDAP://ou=Users,ou=corp,dc=domain,dc=com' WHERE objectCategory='User'"
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
strGroups = ""
'strName = objRecordset.Fields("distinguishedName").Value
strName = objRecordset.Fields("Name").Value
arrGroups = objRecordset.Fields("memberOf").Value
If IsNull(arrGroups) Then
strGroups = ""
Else
For Each strItem In arrGroups
GroupNameChars=inStr(strItem,",")
GroupName=Left(strItem,(GroupNameChars-1))
GroupName=Replace(GroupName,"CN=","")
'strGroups = strGroups & vbTab & strItem
strGroups = strGroups & vbTab & GroupName
Next
End If
Wscript.Echo strName & vbTab & strGroups
objRecordSet.MoveNext
Loop