Привязка к объектам AD (с различными местоположениями) - PullRequest
1 голос
/ 05 августа 2009

Мы переносим несколько доменов в один домен. Как часть этого процесса, учетные записи пользователей перемещаются по различным объявлениям довольно много. Это привело к сбою некоторых сценариев, поскольку они пытаются получить объекты User из определенного места в AD.

Как бы я изменил следующее, чтобы не указывать местоположение AD?

Set objBlahUser = GetObject("LDAP://CN=" & objNetwork.UserName & ",OU=ADMigration,OU=Blah Users,DC=blah,DC=loc")                                                    

Заранее спасибо

Ответы [ 3 ]

3 голосов
/ 11 августа 2009

Самый простой способ сделать это - использовать объект NameTranslate , встроенный в Windows

Const ADS_NAME_INITTYPE_GC = 3
Const ADS_NAME_TYPE_NT4 = 3
Const ADS_NAME_TYPE_1779 = 1

strNTName = "MyDomain\TestUser"
Set objTrans = CreateObject("NameTranslate")
objTrans.Init ADS_NAME_INITTYPE_GC, ""
objTrans.Set ADS_NAME_TYPE_NT4, strNTName
strUserDN = objTrans.Get(ADS_NAME_TYPE_1779)

Здесь есть отличная запись об этом объекте:

http://www.rlmueller.net/NameTranslateFAQ.htm

0 голосов
/ 05 августа 2009

Таким образом, нет способа поиска и выбора объекта из каталога. Мне пришлось использовать отдельную функцию для поиска и возврата DN объекта для последующего использования.

userDN = GetUserDN(objNetwork.UserName,"server001","blah.loc")
If Not userDN = "Error" Then
    Set objBlahUser = GetObject("LDAP://" & userDN)
End if                                                  



Function GetUserDN(strUserName, strServer, strDomain)
    On Error Resume Next

    Set objConnection = CreateObject("ADODB.Connection")
        objConnection.Provider = "ADsDSOObject"
        objConnection.Properties("User ID") = strDomain & "\ReadADAccount"
        objConnection.Properties("Password") = "ReadADAccountPwd"
        objConnection.Open "Active Directory Provider"


    Set objCommand = CreateObject("ADODB.Command")
    objCommand.ActiveConnection = objConnection

    objCommand.CommandText = _
        "<LDAP://" & strServer & ">;(&(objectCategory=User)" & _
             "(samAccountName=" & strUserName & "));distinguishedname;subtree"

    Set objRecordSet = objCommand.Execute

    If objRecordset.RecordCount = 0 Then
        GetUserDN = "Error"
    Else
        GetUserDN = objRecordSet(0).value
    End If

    objConnection.Close
End Function
0 голосов
/ 05 августа 2009

Вы просто хотите указать имя хоста? Предполагая, что остальная часть структуры AD идентична, вы можете просто указать имя сервера в строке привязки:

Set objBlahUser = GetObject("LDAP://yourserver.com/CN=" & objNetwork.UserName & ",OU=ADMigration,OU=Blah Users,DC=blah,DC=loc")
...