我尝试使用telephoneNumber
(多属性查询)等空属性搜索所有用户。
在互联网上,我发现了许多关于PowerShell和LDAP的内容,但它非常复杂,没有任何效果。
答案 0 :(得分:3)
LDAP过滤器具有丑陋的语法,但一旦理解their structure,它们就不那么困难了。基本上,每个子句都放在一组括号中:
(attribute=value)
条款可以否定:
(!(attribute=value))
和多个子句可以通过逻辑AND或OR操作组合:
(&(attribute=somevalue)(otherattribute=othervalue)...)
(|(attribute=somevalue)(otherattribute=othervalue)...)
要过滤空属性,您需要一个LDAP过滤器,说明"属性telephoneNumber
没有任何值":
(!(telephoneNumber=*))
星号(*
)是任意非空值的通配符。否定该条款可以为您提供所需内容。对于更复杂的过滤器,您可以根据上述要求制作上述条款(每个属性一个),并根据您的要求将它们与(&...)
和/或(|...)
结合使用。
示例(获取具有空telephoneNumber
或mail
属性的用户):
Get-ADUser -LDAPFilter '(|(!(telephoneNumber=*))(!(mail=*)))'
另一种选择是获取所有用户并使用Where-Object
过滤器来选择具有所需属性的过滤器。
示例(再次,获取具有空telephoneNumber
或mail
属性的用户):
Get-ADUser -Filter * -Properties * | Where-Object {
-not $_.telephoneNumber -or
-not $_.mail
}