修改PowerShell LDAPFilter添加enabled=true时的异常问题
解决AD查询过滤器添加启用账户条件的问题
问题核心在于LDAP过滤器不支持enabled属性——你用的是PowerShell比较语法,但-LDAPFilter参数要求标准LDAP格式过滤器,两者语法不兼容。
方案1:修正LDAP过滤器写法
AD账户的启用状态由userAccountControl属性的位标志控制,禁用账户会设置位2(值为2),要筛选启用账户,需排除该位被设置的对象。完整过滤器代码如下:
$filter = "(&(msExchMailboxguid=*)" + "(facilityID=12345)" + "(!(userAccountControl:1.2.840.113556.1.4.803:=2))" + "(|(jobCodeID=0001)" + "(jobCodeID=0002)" + "(jobCodeID=0003)" + "(jobCodeID=0004)" + "(jobCodeID=0005)" + "(jobCodeID=0006)))" Get-ADUser -SearchBase "dc=acme,dc=corp" -LDAPFilter $filter
其中(!(userAccountControl:1.2.840.113556.1.4.803:=2))是LDAP位匹配语法,作用是排除所有被禁用的账户。
方案2:改用PowerShell原生Filter参数
若无需严格使用LDAP过滤器,推荐用Get-ADUser的-Filter参数,它支持PowerShell风格的直观语法,直接用enabled -eq $true即可:
$filter = { msExchMailboxguid -ne $null -and facilityID -eq '12345' -and enabled -eq $true -and (jobCodeID -eq '0001' -or jobCodeID -eq '0002' -or jobCodeID -eq '0003' -or jobCodeID -eq '0004' -or jobCodeID -eq '0005' -or jobCodeID -eq '0006') } Get-ADUser -SearchBase "dc=acme,dc=corp" -Filter $filter
这种写法更易读,也能避免括号匹配或语法错误。
内容的提问来源于stack exchange,提问作者Ace
相关产品推荐
相关产品推荐

