Что делает (

#powershell #ldap #ldap-query

#powershell #ldap #ldap-запрос

Вопрос:

В частности, для сценария, который обновляет список серверов печати в домене:

 Import-Module ActiveDirectory
Get-ADObject -LDAPFilter "(amp;(amp;(amp;(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

Поскольку в этом вопросе используются специальные символы, я не могу легко найти эту информацию.

Комментарии:

1. (amp;(condition1)(condition2)) является AND условием для фильтра LDAP. В вашем письменном примере вам нужен только один amp; , так как остальное излишне.

Ответ №1:

In (amp;) amp; это AND логический оператор в фильтре LDAP. Аналогичным образом | используется в качестве OR логического оператора. Поскольку условия фильтров LDAP заключены в круглые скобки, в итоге вы получаете синтаксис (amp;(condition1)(condition2)) . Все, что заключено в круглые скобки (amp;) , является частью AND .

Синтаксис фильтра LDAP не имеет ничего общего с PowerShell. Случается, что PowerShell поддерживает это некоторыми своими командами. См. Фильтры LDAP.

Вы видите это в PowerShell с ActiveDirectory помощью команд модуля. Вот некоторые примеры:

 # Find a user with first name John and mail domain of domain.com
Get-ADUser -LDAPFilter '(amp;(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 '(|(amp;(GivenName=John)(Mail=*@domain.com))(sn=John))'
 

В вашем примере должны присутствовать два условия. Поэтому вы можете использовать AND оператор. amp; Однако требуется только одно, поскольку для двух условий вложенность не требуется.

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