Использование и / или операторов в команде powershell - PullRequest
0 голосов
/ 01 апреля 2020

Я хочу, чтобы этот запрос возвращал только включенных пользователей, чье имя соответствует "маркетинг" или "учет". Однако, когда я запускаю эту программу, она также возвращает отключенных пользователей? Что мне не хватает? Из моего исследования я пришел к этому, но он не работает.

Get-ADuser -filter {(Name -like "*marketing*") -or (Name -like "*accounting*") -and (Enabled -eq "true")} -Properties *

Спасибо за любой совет!

1 Ответ

1 голос
/ 01 апреля 2020

В логических логиках c в общем случае AND имеет приоритет перед OR. Другими словами, операции И оцениваются в первую очередь, перед ИЛИ.

Так что эта команда действительно запрашивает учетные записи, где либо:

  1. Имя содержит «маркетинг», либо
  2. Имя содержит «бухгалтерский учет» и включено

Чтобы получить требуемые результаты, вам необходимо заключить в скобки все выражение -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 *
...