Set objUser = GetObject("LDAP://cn=" & xName & ",ou=Проектный,ou=Отделы,dc=inst,dc=ru")
WScript.Echo "Пользователь: " & Mid(objUser.Name,4) & vbCr & _
"Статус учётной записи: " & CStr(objUser.AccountDisabled) & vbCr & _
"Путь к профилю: " & objUser.ProfilePath
список юзеров и их аттрибуты из AD
defNC = objRoot.Get(""DefaultNamingContext"")
""<LDAP://"" & defNC &"">;(objectCategory=person);Name
;Subtree""
//далее в цикле достаем пользователей
А как быть, если надо ещё получать кое-какие аттрибуты для пользователей?
В самом общем случае ответ таков - выполняем привязку к объекту Пользователь, а затем читаем значение нужного свойства.
Например:
Код:
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.CommandText = _
";(objectCategory=User);Name;Subtree"
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
Wscript.Echo objRecordSet.Fields("Name").Value
objRecordSet.MoveNext
Loop
Этот код выводит спиок пользователей. Как получить свойства? В цикле делать привязку к конкретному пользователю? Мне нужен просто тупой список пользователей и некоторые их свойства(фамилия, телефон, номер комнаты и т.д.), я не знаю не отдела ни чего просто тупой список.
Вот пример:
Код:
Set objRoot = GetObject("LDAP://RootDSE")
domName = objRoot.Get("DefaultNamingContext")
Set objRoot = Nothing
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand = CreateObject("ADODB.Command")
Set objCommand.ActiveConnection = objConnection
findAttributes = "Name,Mail,TelephoneNumber,Division,Department"
objCommand.CommandText = "<LDAP://" & domName & ">;(&(objectCategory=Person)(objectClass=User));" & findAttributes & ";Subtree"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Timeout") = 30
Set objRSet = objCommand.Execute
numRecords = objRSet.RecordCount
Set scrShell = CreateObject("WScript.Shell")
WScript.Echo "Обнаружено записей: " & numRecords
If numRecords > 0 Then
objRSet.MoveFirst
Do Until objRSet.EOF Or stopFlag = True
curUserInfo = Null
For i = 0 To objRSet.Fields.Count - 1
curUserInfo = curUserInfo & objRSet.Fields(i).Name & " = " & objRSet.Fields(i).Value & vbCr
Next
'Wscript.Echo curUserInfo
xAnsver = scrShell.Popup(curUserInfo & vbCr & "Продолжить?", , "Результаты поиска", vbQuestion + vbYesNo)
If xAnsver = vbYes Then
objRSet.MoveNext
Else
stopFlag = True
End If
Loop
End If
Set scrShell = Nothing
Set objRSet = Nothing
Set objCommand = Nothing
Set objConnection = Nothing
domName = objRoot.Get("DefaultNamingContext")
Set objRoot = Nothing
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand = CreateObject("ADODB.Command")
Set objCommand.ActiveConnection = objConnection
findAttributes = "Name,Mail,TelephoneNumber,Division,Department"
objCommand.CommandText = "<LDAP://" & domName & ">;(&(objectCategory=Person)(objectClass=User));" & findAttributes & ";Subtree"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Timeout") = 30
Set objRSet = objCommand.Execute
numRecords = objRSet.RecordCount
Set scrShell = CreateObject("WScript.Shell")
WScript.Echo "Обнаружено записей: " & numRecords
If numRecords > 0 Then
objRSet.MoveFirst
Do Until objRSet.EOF Or stopFlag = True
curUserInfo = Null
For i = 0 To objRSet.Fields.Count - 1
curUserInfo = curUserInfo & objRSet.Fields(i).Name & " = " & objRSet.Fields(i).Value & vbCr
Next
'Wscript.Echo curUserInfo
xAnsver = scrShell.Popup(curUserInfo & vbCr & "Продолжить?", , "Результаты поиска", vbQuestion + vbYesNo)
If xAnsver = vbYes Then
objRSet.MoveNext
Else
stopFlag = True
End If
Loop
End If
Set scrShell = Nothing
Set objRSet = Nothing
Set objCommand = Nothing
Set objConnection = Nothing
Ключ к решению Вашей задачи заключается, собственно, в паре строк:
Код:
findAttributes = "Name,Mail,TelephoneNumber,Division,Department"
objCommand.CommandText = "<LDAP://" & domName & ">;(&(objectCategory=Person)(objectClass=User));" & findAttributes & ";Subtree"
objCommand.CommandText = "<LDAP://" & domName & ">;(&(objectCategory=Person)(objectClass=User));" & findAttributes & ";Subtree"
В пример я включил несколько "попавшихся под руки" свойств. Все прочие можно найти в MSDN, в разделе, посвящённом схеме AD.
Все я разобрался в чем дело. Мой скрипт сразу работал просто я его использовал в 1С, а результат его работы неправильно проанализировал, ну в общем всё ок. Спасибо!