【问题标题】:What does (&(&(&( .. ))) do in PowerShell (Windows)?(&(&(&( .. ))) 在 PowerShell (Windows) 中有什么作用?
【发布时间】:2020-11-24 21:14:59
【问题描述】:

具体来说,对于更新域上的打印服务器列表的脚本:

Import-Module ActiveDirectory
Get-ADObject -LDAPFilter "(&(&(&(uncName=*)(objectCategory=printQueue))))"

此脚本位于: https://social.technet.microsoft.com/Forums/windowsserver/en-US/f0ca6504-2643-4010-b53c-96696d7a401c/how-to-list-all-print-servers-in-a-domain?forum=winserverprint

因为这个问题涉及特殊字符,所以我不能轻易搜索到这个信息。

【问题讨论】:

  • (&(condition1)(condition2)) 是 LDAP 过滤器的 AND 条件。在您的书面示例中,您只需要一个&,因为其余的都是多余的。

标签: powershell ldap ldap-query


【解决方案1】:

(&) 中,& 是 LDAP 过滤器中的 AND 逻辑运算符。以类似的方式,| 用作OR 逻辑运算符。由于 LDAP 过滤条件用括号括起来,因此您最终会得到语法 (&(condition1)(condition2))(&) 括号内的所有内容都是 AND 的一部分。

LDAP 过滤器语法与 PowerShell 无关。 PowerShell 恰好通过它的一些命令来支持它。 请参阅 LDAP Filters

您确实可以在 PowerShell 中使用 ActiveDirectory 模块命令看到它。一些例子是:

# Find a user with first name John and mail domain of domain.com
Get-ADUser -LDAPFilter '(&(GivenName=John)(Mail=*@domain.com))'

# Find users with first name John or last name John
Get-ADUser -LDAPFilter '(|(GivenName=John)(sn=John))'

# Nested conditions: First name john with mail @domain.com OR simply just last name John
Get-ADUser -LDAPFilter '(|(&(GivenName=John)(Mail=*@domain.com))(sn=John))'

在您的示例中,需要存在两个条件。因此,您可以使用 AND 运算符。不过只需要一个&,因为两个条件都不需要嵌套。

Get-ADObject -LDAPFilter "(&(uncName=*)(objectCategory=printQueue))"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2014-12-19
    • 2014-05-15
    相关资源
    最近更新 更多