Скрипты Powershell с использованием where-object - PullRequest
5 голосов
/ 09 февраля 2011

Я пытаюсь написать сценарий powershell для Exchange Management Shell, импортируя список контактов из файла csv в группу рассылки.

Я начинаю с

Import-csv C:\filename.csv | forEach-Object {New-MailContact .......}

Этоработает хорошо, за исключением того, что некоторые записи в моем CSV-файле имеют пустой адрес электронной почты, и создание нового контакта прекращается, потому что ExternalEmailAddress пуст.Итак, я попробовал:

Import-csv C:\filename.csv | ForEach-Object { Where-Object {$_.ExternalEmailAddress -ne "" } | New-MailContact -Name $_.Name -ExternalEmailAddress $_.ExternalEmailAddress....}

Но, похоже, это не сработало - он не отфильтровал записи с пустыми адресами электронной почты.

Что я делаю не так?

Ответы [ 2 ]

9 голосов
/ 09 февраля 2011

Я думаю, вы можете использовать Where-Object до ForEach-Object, потому что он будет фильтровать объекты, переданные по конвейеру.

В зависимости от того, что поддерживает командлет New-MailContact, вы можете передавать результаты непосредственно в него или вам придется передавать их по одному.

Все сразу (НЕ используя ForEach-Object):

Import-csv C:\filename.csv | Where-Object {$_.ExternalEmailAddress -ne "" } | New-MailContact -Name $_.Name -ExternalEmailAddress $_.ExternalEmailAddress }

Один за другим (используя ForEach-Object):

Import-csv C:\filename.csv | Where-Object {$_.ExternalEmailAddress -ne "" } | ForEach-Object { New-MailContact -Name $_.Name -ExternalEmailAddress $_.ExternalEmailAddress }
1 голос
/ 09 февраля 2011

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

 Import-csv C:\filename.csv | Where-Object {$_.ExternalEmailAddress -match "^\S+$" } | New-MailContact -Name $_.Name -ExternalEmailAddress $_.ExternalEmailAddress....}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...