合并LDAP查询未返回预期结果,求问题排查
问题分析与解决方案
你的查询问题出在LDAP过滤器的逻辑结构错误,没有正确组合「OR」和「AND」的优先级。
你的需求是:
- 计算机对象,且
- (操作系统包含
server或 操作系统包含Enterprise),且 - 账号未禁用
但你写的两个合并查询都不符合这个逻辑:
第一个合并查询的过滤器是:
(&(objectclass=computer)(operatingSystem=*server*)(|(operatingSystem=*Enterprise*))(!(userAccountControl:1.2.840.113556.1.4.803:=2)))这个逻辑是「计算机 + 含
server的系统 + 含Enterprise的系统 + 未禁用」,本质是要求操作系统同时包含server和Enterprise,不存在这样的机器,所以返回空结果。第二个写法直接用
&连接两个操作系统条件,同样是要求系统同时满足两个关键词,自然也没有结果。
正确的LDAP过滤器写法
需要把「操作系统包含server 或 Enterprise」用|包裹作为一个整体,再和其他条件用&组合:
Get-ADObject -searchbase "DC=DOMAIN,DC=LOCAL" -ldapfilter "(& (objectclass=computer) (!(userAccountControl:1.2.840.113556.1.4.803:=2)) (| (operatingSystem=*server*) (operatingSystem=*Enterprise*)) )" | Sort-Object Name
解释:
(& ...)表示所有内部条件必须同时满足(| (operatingSystem=*server*) (operatingSystem=*Enterprise*))是独立逻辑块,表示满足其中任意一个操作系统条件即可- 外层的
&把「计算机对象」「未禁用」「操作系统符合任一条件」三个要求绑定,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Charles Waters
相关产品推荐
相关产品推荐

