1 (изменено: twi11ight, 2011-05-13 23:48:28)

Тема: VBScript: AD Узнать логин по ФИО

Подскажите пожалуйста способ узнать логин пользователя по ФИО.
Пробовал dsquery, но знания слабы и получаю в ответ на запрос только эти же ФИО (samid)
Нашел скрипт, но он мне показывает все кроме логина 

domainname=""
username=inputbox("Enter username:")


if domainname = "" then
    set objRoot = getobject("LDAP://RootDSE")
    domainname = objRoot.get("defaultNamingContext")
end if

if username <> "" then
    wscript.echo finduser(username,domainname)
end if


Function FindUser(Byval UserName, Byval Domain) 
    on error resume next

    set cn = createobject("ADODB.Connection")
    set cmd = createobject("ADODB.Command")
    set rs = createobject("ADODB.Recordset")

    cn.open "Provider=ADsDSOObject;"
    
    cmd.activeconnection=cn
    cmd.commandtext="SELECT ADsPath FROM 'LDAP://" & Domain & _
             "' WHERE Name = '" & UserName & "'"
    
    set rs = cmd.execute

    if err<>0 then
        FindUser="Error connecting to Active Directory Database:" & err.description
    else
        if not rs.BOF and not rs.EOF then
                 rs.MoveFirst
                 FindUser = rs(0)
        else
            FindUser = "Not Found"
        end if
    end if
    cn.close
end function

Со скриптом не вышло, жаль, но пока сделано:

@echo off
for /f "tokens=*" %%i in (%1) do (
 dsquery * -filter "(displayname=%%i)" | dsget user -display -samid -L | find /V "dsget"
 )

2

Re: VBScript: AD Узнать логин по ФИО

Вероятно, Вам нужно что-то такое:


Function FindUser(Byval UserName, Byval Domain)
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=ADsDSOObject;"
Set cmd = CreateObject("ADODB.Command")
Set cmd.ActiveConnection = cn
cmd.CommandText = "SELECT userPrincipalName FROM 'LDAP://" & Domain & _
	"' WHERE objectCategory='Person' AND objectClass='User' AND (samAccountName='" & UserName & _
	"' OR displayName='" & UserName & "' OR FullName='" & UserName & "')"
cmd.Properties("Searchscope") = 2
Set rs = cmd.Execute
If rs.RecordCount = 1 Then
	FindUser = rs(0)
Else
	FindUser = "Not Found"
End if
cn.Close
End Function

3 (изменено: Rom5, 2011-06-02 08:19:42)

Re: VBScript: AD Узнать логин по ФИО

Кстати, спасибо за подсказку искать по "displayName", а то все по привычке искал лишь по "samAccountName".

А, вот, использование оператора OR по образу:

....(samAccountName='" & UserName & "' OR displayName='" & UserName & "')"

у меня упрямо не получалось, т.к. и по точно указанному samAccountName ничего уже не выбиралось.

Решил так: дополнил форму radiobutton-ами и по их значению формировал запрос с использованием либо одного поля, либо другого.

Причем при использовании displayName, если пользователь не вводил свои подстановочные символы, то автоматически подменял в искомом выражении все пробелы на "*" и звездочками же его и окружал  - гибкость и удобство значительно повысились. Спасибо за подсказанную идею)

WBR. Roman