- notageek.it di Mirko Iodice - http://www.notageek.it -

List All Users Membership Within An OU And SubOUs

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