2009-08-04 7 views
1

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

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

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

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

ответ

3

Самый простой способ сделать это состоит в использовании 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

Это потрясающе - спасибо за хедз-ап! Будет определенно удалять значительные куски моего будущего кода! – Izzy

0

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

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

Nope - проблема в каждом домене. У домена Blah есть некоторые пользователи в OU Blah Users и другие пользователи в BlahBlah Users. – Izzy

+0

Знаете ли вы заранее, что пользователи переехали в какое место? Если это так, вы можете построить строку привязки еще более динамично, чем сейчас (добавление информации OU, DC и т. Д. На основе некоторых критериев, которые вы знаете). Если вы знаете потенциальные подразделения, в которых может находиться пользователь, и вы знаете, что не будет дублирующих CN в подразделениях, то другой альтернативой может быть попытка привязки к одному подразделению, но если это не удается связать с другим подразделением. Но это некрасиво и поразительно. –

0

Таким образом, нет никакого способа, чтобы внутренне найти и выбрать объект из каталога. Мне пришлось использовать отдельную функцию для поиска и возврата 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 
Смежные вопросы