2014-01-14 2 views
4

У меня есть код для получения сведений о пользователе из AD, такие как адрес электронной почты, номер телефона и т.д., и т.д. коды Сейчас я использую это:Получение сведений о AD на основе имени пользователя

Set objSysInfo = CreateObject("ADSystemInfo") 
strUser = objSysInfo.UserName 
msgbox(strUser) 
Set objUser = GetObject("LDAP://" & strUser) 

Это получает текущие данные пользователя. Но теперь мне нужно проанализировать имя пользователя и получить информацию на основе этого.

Я попытался изменить objSysinfo.UserName на имя пользователя, и оно было пустым.

Set objSysInfo = CreateObject("ADSystemInfo") 
strUser = "SomeUserName" 
msgbox(strUser) 
Set objUser = GetObject("LDAP://" & strUser) 

Как я могу получить информацию из AD на основе предоставленного имени пользователя?

ответ

11

Для URI LDAP требуется выдающееся имя. Имена учетных записей не будут работать. Если вы хотите получить пользовательские объекты на основе имени учетной записи вам нужно «регулярный» LDAP запрос:

username = "SomeUserName" 

Set rootDSE = GetObject("LDAP://RootDSE") 
base = "<LDAP://" & rootDSE.Get("defaultNamingContext") & ">" 
'filter on user objects with the given account name 
fltr = "(&(objectClass=user)(objectCategory=Person)" & _ 
     "(sAMAccountName=" & username & "))" 
'add other attributes according to your requirements 
attr = "distinguishedName,sAMAccountName" 
scope = "subtree" 

Set conn = CreateObject("ADODB.Connection") 
conn.Provider = "ADsDSOObject" 
conn.Open "Active Directory Provider" 

Set cmd = CreateObject("ADODB.Command") 
Set cmd.ActiveConnection = conn 
cmd.CommandText = base & ";" & fltr & ";" & attr & ";" & scope 

Set rs = cmd.Execute 
Do Until rs.EOF 
    WScript.Echo rs.Fields("distinguishedName").Value 
    rs.MoveNext 
Loop 
rs.Close 

conn.Close 

Поскольку я раздражался от того, чтобы написать все, что шаблонный код снова и снова, я завернул его в класс (ADQuery) некоторое время назад.

+0

она работает очень хорошо! Спасибо огромное! Так это запрос, который извлекается из базы данных AD? –

+0

@BloopieBloops Исправить. –

0

Просто дополнительный комментарий к Ansgar the RootDSE замечательный, если у вас только один домен. Вы можете изменить свой код, чтобы указать еще где:

base = "<LDAP://" & rootDSE.Get("defaultNamingContext") & ">" 

к чему-то вроде:

base = "<LDAP://" & "DC=corp,DC=foo,DC=com" & ">" 

если ваш домен домен AD является corp.foo.com

Смежные вопросы