Множественное условие в предложении where - PullRequest
0 голосов
/ 04 декабря 2018

Когда я выполняю приведенный ниже код, я получаю сообщение об ошибке: Не удается найти параметр, который соответствует имени или.Как я могу получить список пользователей, у которых нет abc.com или xyz.com в их адресе электронной почты?

Get-ADGroupMember -Identity "AQ" -Recursive | where objectClass -eq 'user' | Get-ADUser -Properties *,  "msDS-UserPasswordExpiryTimeComputed", PasswordNeverExpires |

where  mail -notmatch "@abc.com" -or "@xyz.com" | 
Select-Object @{Label = "SAM Account Name";Expression = {$_.SamAccountName}}

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Вам не хватает скобок вокруг where-clause:

where {objectClass -eq 'user'}

И это:

where {mail -notmatch "@abc.com" -or  "@xyz.com"}

Должно выглядеть так:

where {mail -notmatch "@abc.com" -or mail -notmatch "@xyz.com"}

Пожалуйста, переосмыслите логику вашего второго, где он всегда будет правдой.

0 голосов
/ 04 декабря 2018

Фигурные скобки (на самом деле блок сценариев со сценарием фильтра) не всегда можно пропустить с помощью Where-Object.

Вы можете сделать Where-Object objectClass -eq 'user', но все, что включает в себя более одного оператора, требует написанияв качестве сценария фильтра:

where {$_.mail -notmatch "@abc.com" -or "@xyz.com" }

Теперь эта логика не работает, поскольку это эквивалентно следующему утверждению:

where {($_.mail -notmatch "@abc.com") -or $true }

Таким образом, ваше предложение where является истинным, независимо отрезультат операции -notmatch.Вместо этого вам понадобятся две операции -notmatch:

Where-Object - { $_.Mail -notmatch '@abc.com' -and $_.Mail -notmatch '@xyz.com' }

В зависимости от количества адресов электронной почты, которые вы хотите исключить из сценария фильтра, вы можете использовать другой подход: удалить имя пользователя изадрес электронной почты и посмотрите, появляется ли этот адрес в массиве адресов электронной почты, которые вы хотите исключить.

Where-Object { ( $_.Mail -replace '^[^@]+') -notin '@abc.com','@xyz.com','@foo.bar' }
0 голосов
/ 04 декабря 2018

для нескольких условий используйте полный синтаксис:

where-object { $_.property -eq $b -and $_.otherproperty -match $a }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...