Как с помощью VBScript получить информацию о пользователе из контроллера домена (AD - Active Directory).

Рассмотрим VBS скрипт, который получает информацию о пользователе из Active Directory используя подключение ADODB.

Ниже представлен полный листинг скрипта


MsgBox GetADInfo("samAccountName","Nikolaev.ON","Title,Department,Company,Mobile")
'distinguishedName

Function GetADInfo(ByVal SearchField, ByVal SearchString, ByVal ReturnField)
	' Указываем  имя домена ("dc=domain, dc=local")
	Dim adoCommand, strDomain, objConnection
	
	strDomain = "dc=3dlan,dc=ru"
	
	Set objConnection = CreateObject("ADODB.Connection")
	objConnection.Open "Provider=ADsDSOObject;"
	
	' Подключаемся
	Set adoCommand = CreateObject("ADODB.Command")
	adoCommand.ActiveConnection = objConnection
	
	' Рекурсивный поиск по AD, начиная с корня домена
	adoCommand.CommandText = _
     "<LDАР://" & strDomain & ">;(&(objectCategory=" & "User" & ")" & _
	 "(" & SearchField & "=" & SearchString & "));" & SearchField & "," & ReturnField & ";subtree"

	' создаем набор записей RecordSet
	Dim objRecordSet
	Set objRecordSet = adoCommand.Execute
	
	If objRecordSet.RecordCount = 0 Then
		GetADInfo = "not found"  ' ничего не найдено
	Else
		For i=0 to objRecordSet.Fields.Count - 1
			GetADInfo= GetADInfo & vbnewline & objRecordSet.Fields(i)
		Next 
		'GetADInfo = objRecordSet.Fields(ReturnField) ' возвращаемое значение
	End If
	
	' Закрываем подключение
	objConnection.Close
	
	' Очищаем переменные
	Set objRecordSet = Nothing
	Set objCommand = Nothing
	Set objConnection = Nothing
End Function

Рассмотрим скрипт по подробнее

В функции GetADInfo(ByVal SearchField, ByVal SearchString, ByVal ReturnField) указываем домен нужный домен

	' Указываем  имя домена ("dc=domain, dc=local")
	Dim adoCommand, strDomain, objConnection
	
	strDomain = "dc=3dlan,dc=ru"

Создаём объект ADODB и подключаемся

	Set objConnection = CreateObject("ADODB.Connection")
	objConnection.Open "Provider=ADsDSOObject;"
	
	' Подключаемся
	Set adoCommand = CreateObject("ADODB.Command")
	adoCommand.ActiveConnection = objConnection

Ищем учётную запись в домене

	' Рекурсивный поиск по AD, начиная с корня домена
	adoCommand.CommandText = _
     "<LDАР://" & strDomain & ">;(&(objectCategory=" & "User" & ")" & _
	 "(" & SearchField & "=" & SearchString & "));" & SearchField & "," & ReturnField & ";subtree"

Подготавливаем итоговые значения

' создаем набор записей RecordSet
	Dim objRecordSet
	Set objRecordSet = adoCommand.Execute
	
	If objRecordSet.RecordCount = 0 Then
		GetADInfo = "not found"  ' ничего не найдено
	Else
		For i=0 to objRecordSet.Fields.Count - 1
			GetADInfo= GetADInfo & vbnewline & objRecordSet.Fields(i)
		Next 
		'GetADInfo = objRecordSet.Fields(ReturnField) ' возвращаемое значение
	End If

Закрываем подключение

objConnection.Close

Очищаем переменные

	Set objRecordSet = Nothing
	Set objCommand = Nothing
	Set objConnection = Nothing

Вызов самой функции, при этом указываем параметры, которые хотим дополнительно получить в ответе.

MsgBox GetADInfo("samAccountName","Nikolaev.ON","Title,Department,Company,Mobile")

Удачи

Комментарии ()

    385