TUTOS.EU

Lister les membres des groupes d'un domaine AD

Comment obtenir en Vbscript la liste des groupes d'un domaine AD avec leurs membres

Option Explicit

Dim MyDistinguishedName
Dim objRootDSE, objItem, objConnection, objCommand, objRecordSet
Dim strContainer, strname, arrMember, strMember
Dim intCounter, Position

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

Const ADS_UF_ACCOUNTDISABLE = 2 
Const ADS_SCOPE_SUBTREE = 2

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.CommandText = "<LDAP://" & MyDistinguishedName & ">;(objectCategory=Group);name,cn,displayName,sAMAccountName,distinguishedName,member;subtree"


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

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 & "sAMAccountName : " & VbTab & objRecordset.Fields("sAMAccountName")
	WScript.echo VbTab & "distinguishedName : " & VbTab & objRecordset.Fields("distinguishedName")
	'WScript.echo VbTab & "member : " & VbTab & objRecordset.Fields("member")
	
	arrMember = objRecordSet.Fields("member")
	If IsArray(arrMember) Then
		For each strMember in arrMember
			'WScript.echo VbTab & VbTab & strMember
			'C'est normalement le distinguishedName qui est affiché quand on affiche la valeur de strMember
			'Le code ci-dessous effectue une mise en forme en éliminant ce qui est après le premier signe égal et avant la première virgule.
			Position = Instr(strMember,",")
			If Position > 0 Then strMember = Left(strMember, Position-1)
			Position = Instr(strMember,"=")
			If Position > 0 Then strMember = Mid(strMember,Position+1)
			WScript.echo VbTab & VbTab & strMember
		Next
	Else
		WScript.echo VbTab & VbTab & "No users in group named " & objRecordset.Fields("Name")
	End If
	
	objRecordset.MoveNext 
Loop 
objConnection.Close
Lien vers le fichier : cliquez ici

Article(s) en relation(s)