You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell LDAPFilter多条件组合无结果,请求排查逻辑错误

问题排查与修正

你的脚本核心问题是错误使用PowerShell的-or运算符拼接LDAP过滤器,LDAP过滤器有独立的语法规则,不能直接用PowerShell的逻辑运算符组合。

错误原因解析

当你执行($filter1 -or $filter2)时,PowerShell会将两个非空字符串判定为布尔值$true,最终传入-LDAPFilter的是布尔值$true,而非符合LDAP规范的过滤条件,因此返回空结果。

修正方案

需要使用LDAP原生的逻辑或语法(|条件1 条件2)来组合两个过滤规则,直接拼接成合法的LDAP过滤器字符串:

修正后的脚本

$filter1 = "(!(memberOf=CN=MDM Newyork,OU=Cloud Apps,OU=Groups,DC=companyX,DC=com))"
$filter2 = "(!(memberOf=CN=MDM California,OU=Cloud Apps,OU=Groups,DC=companyX,DC=com))"

# 用LDAP的(|...)语法组合两个条件
$ldapFilter = "(|$filter1 $filter2)"

Get-ADComputer -LDAPFilter $ldapFilter -SearchBase "OU=Prod Workstations,DC=companyX,DC=com" -Properties * | 
    Select-Object Name, @{n="OU"; e={$_.DistinguishedName -replace '^.*?,(?=[A-Z]{2}=)'}} | 
    Sort-Object OU

额外说明

如果你的实际需求是获取同时不属于两个组的工作站(既不在MDM Newyork,也不在MDM California),则需要使用LDAP的逻辑与语法(&...)替换(|...):

$ldapFilter = "(&$filter1 $filter2)"

内容的提问来源于stack exchange,提问作者RookieMistake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 00:32:40