В логических логиках c в общем случае AND имеет приоритет перед OR. Другими словами, операции И оцениваются в первую очередь, перед ИЛИ.
Так что эта команда действительно запрашивает учетные записи, где либо:
- Имя содержит «маркетинг», либо
- Имя содержит «бухгалтерский учет» и включено
Чтобы получить требуемые результаты, вам необходимо заключить в скобки все выражение -or
, чтобы оно сначала было оценено, и оставить -and
вне скобок:
Get-ADuser -Filter {(Name -like "*marketing*" -or Name -like "*accounting*") -and Enabled -eq "true"} -Properties *
Как упоминалось в комментариях выше, документация говорит нам, что параметр -Filter
технически является строкой. Так что, если вы дадите ему блок сценария ({ }
), PowerShell выполнит перевод, чтобы преобразовать его в строку. Иногда этот перевод может go быть неправильным, поэтому вам часто лучше дать ему строку, которая должна быть, которая будет выглядеть примерно так:
Get-ADuser -Filter "(Name -like '*marketing*' -or Name -like '*accounting*') -and Enabled -eq 'true'" -Properties *