2008-11-12 1 views
4

Я пытаюсь использовать VBScript для подключения вытащить атрибут physicalDeliveryOfficeName в Active Directory, указав адрес электронной почты.VBScript LDAP: Есть ли способ запроса для физическогоDeliveryOfficeName, используя адрес электронной почты в 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") 

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

ответ

4

Я закончил тем, что писал следующее:

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

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

<LDAP://SERVERNAME/DC=bobdom,DC=net>;(&(objectClass=user)([email protected])); 

Пытается его в своей собственной среде, это выглядит следующим образом (с парой вещей обобщенных):

<LDAP://SERVERNAME/DC=bobdom,DC=net>;(&([email protected]));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>;(&([email protected]));name,distinguishedName,physicalDeliveryOfficeName;subTreeCount=1>" 

oCmd.CommandText = sQuery 
Set ADRecordSet = oCmd.Execute 

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

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