搜索具有空属性的用户

时间:2015-09-01 14:29:42

标签: filter active-directory attributes ldap powershell-v4.0

我尝试使用telephoneNumber(多属性查询)等空属性搜索所有用户。 在互联网上,我发现了许多关于PowerShell和LDAP的内容,但它非常复杂,没有任何效果。

1 个答案:

答案 0 :(得分:3)

LDAP过滤器具有丑陋的语法,但一旦理解their structure,它们就不那么困难了。基本上,每个子句都放在一组括号中:

(attribute=value)

条款可以否定:

(!(attribute=value))

和多个子句可以通过逻辑AND或OR操作组合:

(&(attribute=somevalue)(otherattribute=othervalue)...)
(|(attribute=somevalue)(otherattribute=othervalue)...)

要过滤空属性,您需要一个LDAP过滤器,说明"属性telephoneNumber没有任何值":

(!(telephoneNumber=*))

星号(*)是任意非空值的通配符。否定该条款可以为您提供所需内容。对于更复杂的过滤器,您可以根据上述要求制作上述条款(每个属性一个),并根据您的要求将它们与(&...)和/或(|...)结合使用。

示例(获取具有空telephoneNumbermail属性的用户):

Get-ADUser -LDAPFilter '(|(!(telephoneNumber=*))(!(mail=*)))'

另一种选择是获取所有用户并使用Where-Object过滤器来选择具有所需属性的过滤器。

示例(再次,获取具有空telephoneNumbermail属性的用户):

Get-ADUser -Filter * -Properties * | Where-Object {
  -not $_.telephoneNumber -or
  -not $_.mail
}