当我跑步时:
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))
答案 0 :(得分:0)
没关系,显然无法做到。我的前几次尝试将无法工作,因为distinguishedName属性是一个构造值,这意味着它不能用于过滤,也不能用于通配符。我的答案是在嗨脚本专家身上找到的!博客:
简而言之,您无法通过LDAP过滤执行此操作,您必须返回整个结果集,然后对结果使用自定义过滤器(vbscript等)。