VBScript LDAP: есть ли способ запросить физическое имя доставки с использованием адреса электронной почты в Active Directory? - PullRequest
4 голосов
/ 12 ноября 2008

Я пытаюсь использовать VBScript для подключения, потяните атрибут physicalDeliveryOfficeName в Active Directory , указав адрес электронной почты.

Я знаю, как сделать это с общим именем, например:

Set MyUser = GetObject ("LDAP://cn=" & uname & ",ou=" & strname & ",DC=bobdom,DC=net")

Однако доступен только адрес электронной почты. Как это сделать? Я даже пытался

Set MyUser = GetObject ("LDAP://mail=" & uname & ",ou=" & strname & ",DC=bobdom,DC=net")

и это не работает.

Ответы [ 2 ]

4 голосов
/ 21 ноября 2008

В итоге я написал следующее:

Function getOffice (strname, uname) 

strEmail = uname
WScript.Echo "email: " & strEmail 
Dim objRoot : Set objRoot = GetObject("LDAP://RootDSE")
Dim objDomain : Set objDomain = GetObject("LDAP://" & objRoot.Get("defaultNamingContext"))
Dim cn : Set cn = CreateObject("ADODB.Connection")
Dim cmd : Set cmd = CreateObject("ADODB.Command")
cn.Provider = "ADsDSOObject"
cn.Open "Active Directory Provider"
Set cmd.ActiveConnection = cn

cmd.CommandText = "SELECT physicalDeliveryOfficeName FROM '" & objDomain.ADsPath & "' WHERE mail='" & strEmail & "'"
cmd.Properties("Page Size") = 1
cmd.Properties("Timeout") = 300
cmd.Properties("Searchscope") = ADS_SCOPE_SUBTREE

Dim objRS : Set objRS = cmd.Execute
    If IsNull(objRS.Fields(0)) = TRUE Then 
        getOffice = "BLANK"
    Else 
    getOffice = objRS.Fields(0)
    WScript.Echo getOffice 
    End If 


Set objRS = Nothing
Set cmd = Nothing
Set cn = Nothing
Set objDomain = Nothing
Set objRoot = Nothing
End Function 
2 голосов
/ 14 ноября 2008

Если используется запрос LDAP (не уверен, что вам нужно имя сервера в вашем случае):

<LDAP://SERVERNAME/DC=bobdom,DC=net>;(&(objectClass=user)(mail=mike.spencer@kenblanchard.com));

Испытание в моей собственной среде, это выглядит так (с обобщением нескольких вещей):

<LDAP://SERVERNAME/DC=bobdom,DC=net>;(&(mail=email@company.com));name,mail,member,description,memberOf,userParameters,userAccountControl,whenCreated,CN;subTreeCount=1

И весь пакет выглядит следующим образом (в ASP; если сделать это в файле .vbs, вам нужно изменить Server.CreateObject на CreateObject ... я думаю).

Set oCon        = Server.CreateObject("ADODB.Connection")
oCon.Provider   = "ADsDSOObject"
oCon.Open "ADProvider", "ADUsername", "ADPassword"

Set oCmd        = Server.CreateObject("ADODB.Command")
Set oCmd.ActiveConnection = oCon

sQuery = "<LDAP://SERVERNAME/DC=bobdom,DC=net>;(&(mail=email@company.com));name,distinguishedName,physicalDeliveryOfficeName;subTreeCount=1>"

oCmd.CommandText = sQuery
Set ADRecordSet = oCmd.Execute

Возможно, вам придется поиграть с subTreeCount.

...