【问题标题】:VBscript search sAMAccountName from CNVBscript 从 CN 搜索 sAMAccountName
【发布时间】:2018-10-01 22:34:59
【问题描述】:

我编写了这个脚本,它通过 VBscript 从 AD 中提取指定用户的 sAMAccountName,但它似乎只在我自己的 OU 组中工作。这是由于我公司内部的权限限制吗?或者这是因为我在代码中没有看到的东西?

 Dim result
result = getsAMAccountName("Some Name")
msgbox result
Function getsAMAccountName(name)
Dim adoCommand, adoConnection, strBase, strFilter, strAttributes
Dim objRootDSE, strDNSDomain, strQuery, adoRecordset, strsAM, objUser

Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
Set adoCommand.ActiveConnection = adoConnection

Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
msgbox strDNSDomain
strBase = "<LDAP://" & strDNSDomain & ">"

'be sure passed var usersel is referenced properly
strFilter = "(cn=" & name & ")"
strAttributes = "distinguishedName"

strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 100
adoCommand.Properties("Timeout") = 30
adoCommand.Properties("Cache Results") = False

Set adoRecordset = adoCommand.Execute

Do Until adoRecordset.EOF

    strsAM = adoRecordset.Fields("distinguishedName").Value
    Set objUser = GetObject("LDAP://" & strsAM)
    getsAMAccountName = objUser.sAMAccountName
    adoRecordset.MoveNext
Loop

adoRecordset.Close
adoConnection.Close
End Function

【问题讨论】:

    标签: asp-classic vbscript active-directory


    【解决方案1】:

    在 GetObject 调用中指定 OU 时是否有效?

    GetObject("LDAP://OU=YourOU,DC=YourDomain,DC=com")
    

    来自这个问题Querying Active Directory using VBScript

    【讨论】:

    • 看起来当我将 Set objRootDSE = GetObject("LDAP://RootDSE") 更改为我的特定 OU 时,它在下一行出现错误,strDNSdomain
    • 这几行代码也会在 asp-classic 页面上产生错误,“无法创建 activex 元素”
    【解决方案2】:

    最终成为权限,在将 LDAP 拉取到 asp classic 时务必包含/指定 processID 和 PW...并避免使用 asp classic

    Set adoConnection = CreateObject("ADODB.Connection")                
                adoConnection.Provider = "ADsDSOObject"
                    With adoConnection
                        .Properties("User ID") = ' Process ID goes
                        .Properties("Password") = 'password
                        .Properties("encrypt password") = True
                    End With
    
            adoConnection.Open "Active Directory Provider"
            Set adoCommand = CreateObject("ADODB.Command")
            Set adoCommand.ActiveConnection = adoConnection
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 2017-10-24
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      相关资源
      最近更新 更多