Vbscript 如何在不知道确切OU的情况下进行LDAP查询

Vbscript 如何在不知道确切OU的情况下进行LDAP查询,vbscript,ldap,Vbscript,Ldap,现在,这可以很好地列出IS部门(OU=IS)中的所有用户。但当我取出“OU=IS”列出所有部门的所有用户时,它什么也不返回;根本没有用户对象。它将返回给定全名的用户对象的唯一方法是,如果我还指定该用户所包含的OU;但我没有提供的OU 我们的广告结构是 Set objDomain = GetObject("WinNT://abc.local") For each objDomainItem in objDomain if objDomainItem.Class = "User" the

现在,这可以很好地列出IS部门(OU=IS)中的所有用户。但当我取出“OU=IS”列出所有部门的所有用户时,它什么也不返回;根本没有用户对象。它将返回给定全名的用户对象的唯一方法是,如果我还指定该用户所包含的OU;但我没有提供的OU

我们的广告结构是

Set objDomain = GetObject("WinNT://abc.local")

For each objDomainItem in objDomain

    if objDomainItem.Class = "User" then

        'WScript.echo "Name: " & objDomainItem.Name + " : Full Name: " + objDomainItem.FullName

        Set objUser = Nothing
        err.clear

        Set objUser = GetObject("LDAP://cn=" & objDomainItem.FullName & ",OU=IS, OU=Users, OU=ABC Company, DC=ABC, dc=local")

        if err.number = 0 then
            wscript.echo "distinguishedName: " & objUser.distinguishedName
        end if


    end if


Next
我想使用上面的代码来枚举“users”级别的所有用户,向下遍历所有部门,但同样,只要我删除“OU=IS”,它就不会返回任何内容


有什么帮助吗?

使用
ADODB.Connection
ADODB.Command
对象对scope
子树进行查询:

ABC Company --> Users --> IS
ABC Company --> Users --> FINANCE
ABC Company --> Users --> Management
ABC Company --> Users --> Flight Operations
etc etc etc

真是巧合。我刚刚在上周五下载了你的ADQuery。如果我不解决这个问题,我会把它打开试试。小世界.-)下面安斯加的回答很好地解决了这个问题。他的ADQuery课程让我得到了我想要的。但它并没有真正回答这个问题,所以我不确定如何称呼它。我是不是没有回答,只是对安斯加大加赞扬?或者我是否会将他的答案标记为正确,即使它没有真正解决所提出的问题?我更新了我的答案。修改后的代码应返回以下子树中的所有用户对象
OU=Users,OU=ABC Company,DC=ABC,DC=local
。请检查这是否适合您。
base  = "<LDAP://OU=Users,OU=ABC Company,DC=ABC,DC=local>"
fltr  = "(&(objectClass=user)(objectCategory=Person))"
attr  = "distinguishedName,sAMAccountName"
scope = "subtree"

Set cn = CreateObject("ADODB.Connection")
cn.Provider = "ADsDSOObject"
cn.Open "Active Directory Provider"

Set cmd = CreateObject("ADODB.Command")
Set cmd.ActiveConnection = cn
cmd.CommandText = base & ";" & fltr & ";" & attr & ";" & scope

Set rs = cmd.Execute
Do Until rs.EOF
  WScript.Echo rs.Fields("distinguishedName").Value
  WScript.Echo rs.Fields("sAMAccountName").Value
  rs.MoveNext
Loop
'<-- paste or include class code here

Set qry = New ADQuery
qry.SearchBase = "OU=Users,OU=ABC Company,DC=ABC,DC=local"
qry.Attributes = Array("distinguishedName", "sAMAccountName")

Set rs = qry.Execute
Do Until rs.EOF
  WScript.Echo rs.Fields("distinguishedName").Value
  WScript.Echo rs.Fields("sAMAccountName").Value
  rs.MoveNext
Loop