#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))"