搜索具有空属性的用户

Cas*_*er 2 attributes ldap filter active-directory powershell-4.0

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

Ans*_*ers 5

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

(attribute=value)
Run Code Online (Sandbox Code Playgroud)

子句可以否定:

(!(attribute=value))
Run Code Online (Sandbox Code Playgroud)

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

(&(attribute=somevalue)(otherattribute=othervalue)...)
(|(attribute=somevalue)(otherattribute=othervalue)...)
Run Code Online (Sandbox Code Playgroud)

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

(!(telephoneNumber=*))
Run Code Online (Sandbox Code Playgroud)

星号 ( *) 是任意非空值的通配符。否定该条款会给你你想要的。对于更复杂的过滤器,您可以创建类似上述的子句(每个属性一个),并将它们与(&...)和/或(|...)根据您的要求组合。

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

Get-ADUser -LDAPFilter '(|(!(telephoneNumber=*))(!(mail=*)))'
Run Code Online (Sandbox Code Playgroud)

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

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

Get-ADUser -Filter * -Properties * | Where-Object {
  -not $_.telephoneNumber -or
  -not $_.mail
}
Run Code Online (Sandbox Code Playgroud)