vbscript:LDAP自定义筛选器查询尝试搜索域中的所有计算机但排除OU或2

时间:2011-01-11 20:07:54

标签: vbscript ldap

当我跑步时:

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"

strFilter = "(&(objectClass=computer))"

strAttributes = "name,distinguishedName"

strQuery = strDomainDN & ";" & strFilter & ";" & strAttributes & ";subtree"

Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = strQuery
objCommand.Properties("Page Size") = 9999
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst

Do Until objRecordSet.EOF
    strADObjects = strADObjects & objRecordSet.Fields("Name").Value & vbCrLf
    'Wscript.Echo "Location: " & objRecordSet.Fields("DistinguishedName").Value
    objRecordSet.MoveNext
Loop

我的查询就像一个冠军,但当我尝试过滤掉一个特定的OU时,该脚本会抛出错误或完全不排除任何内容。我在strFilter中尝试了很多不同的变种。有没有办法可以查询所有计算机的整个域,但排除特定OU的结果? ......还是OU?我试过了:

strFilter = "(&(objectClass=computer) (!(distinguishedName=*,OU=Computers,DC=mydomain,DC=myTLD)))"
strFilter = "(&(objectClass=computer) (!distinguishedName=*,OU=Computers,DC=mydomain,DC=myTLD))"
strFilter = "(&(objectClass=computer) (!(OU=Computers,DC=mydomain,DC=myTLD)))"
strFilter = "(&(objectClass=computer) (!OU=Computers,DC=mydomain,DC=myTLD))"

任何人都可以提供任何指针,指出我可能搞砸了吗? TIA〜!

编辑:也找到并尝试过,但没有成功:

(&(!(ou:dn:=Computers))(objectClass=Computer))

1 个答案:

答案 0 :(得分:0)

没关系,显然无法做到。我的前几次尝试将无法工作,因为distinguishedName属性是一个构造值,这意味着它不能用于过滤,也不能用于通配符。我的答案是在嗨脚本专家身上找到的!博客:

http://blogs.technet.com/b/heyscriptingguy/archive/2004/12/07/how-can-i-return-a-list-of-all-my-computers-except-those-in-a-specified-ou.aspx

简而言之,您无法通过LDAP过滤执行此操作,您必须返回整个结果集,然后对结果使用自定义过滤器(vbscript等)。