代码之家  ›  专栏  ›  技术社区  ›  Izzy

绑定到广告对象(位置不同)

  •  1
  • Izzy  · 技术社区  · 17 年前

    我们正在从几个域迁移到一个域。作为这一过程的一部分,用户帐户在各种各样的广告中被公平地移动了一点。这导致一些脚本中断,因为它们试图从AD中的特定位置获取用户对象。

    我如何修改以下内容,使其不特定于广告位置?

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

    提前谢谢

    3 回复  |  直到 17 年前
        1
  •  3
  •   mrTomahawk    17 年前

    最简单的方法是使用 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

        2
  •  0
  •   Randy Levy    17 年前

    您只想指定主机名吗?假设AD结构的其余部分相同,则可以在绑定字符串中指定服务器名称:

    Set objBlahUser = GetObject("LDAP://yourserver.com/CN=" & objNetwork.UserName & ",OU=ADMigration,OU=Blah Users,DC=blah,DC=loc")
    
        3
  •  0
  •   Izzy    17 年前

    因此,无法从目录中固有地搜索和选择对象。我必须使用一个单独的函数来搜索和返回对象的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