Дабы не плодить новую тему, спрошу здесь.
Собственно, задача: нужно получить список групп, в которые входит пользователь как непосредственно, так и опосредованно (через вложенность групп).
Делаю следующим образом:
On Error Resume Next
'установка соединения с доменом
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = _
"<LDAP://OU=scripts_test,OU=Пользователи,OU=Новосибирск_nov,OU=Площадки,DC=domain,DC=local>;" & _
"(&(objectCategory=person)(objectClass=user));" & _
"ADsPath;subtree"
'соединились с доменом к OU указанной в objCommand.CommandText, просмотр идет вглубь OU
Set objRecordSet = objCommand.Execute
'цикл пробегающий по всем юзерам, находящихся в указанной OU
While Not objRecordset.EOF
strADsPath = objRecordset.Fields("ADsPath")
'получаем объект пользователя
Set objUser = GetObject(strADsPath)
'получаем массив, состоящий из групп,непосредственным членом которых является пользователь
arrMemberOf = objUser.GetEx("memberOf") 'Получили группы непосредственным членом которых является пользователь
'для каждой группы в массиве arrMemberOf вызываем рекурсивную функцию
For Each Group in arrMemberOf
indirectlyFunction(Group)
Next
'передвигаемся к следующему пользователю
objRecordset.MoveNext
Wend
function indirectlyFunction(strGroup)
Set objIndGroup = GetObject("LDAP://"+strGroup)
Wsh.Echo "Еще одна группа = " & objIndGroup.cn
objIndGroup.GetInfo
arrMembersOf = objIndGroup.GetEx("memberOf")
For Each strMemberOf in arrMembersOf
indirectlyFunction(strMemberOf)
Next
End function
Вот только выходят не все группы, вглубь максимум уходят на одну.