Невозможно получить / перенаправить предупреждение из командлета Exchange - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь использовать командлет Set-DistributionGroup Exchange следующим образом:

$Exch_Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri $ExchangeURI -Authentication Kerberos
Import-PSSession $Exch_Session -commandname Set-DistributionGroup -AllowClobber

if (<condition>) {
    try {
        Set-DistributionGroup @Setparams
    }
    catch {
        <error capture code here...>
    }
}

При успехах и сбоях все работает как положено ... Но во время тестового запуска при попыткеизменив PrimarySMTPAddress на недопустимое значение, я получаю ПРЕДУПРЕЖДЕНИЕ (не ошибка), что новый адрес электронной почты не соответствует политике адресов электронной почты, поэтому он не будет изменен.Но поскольку это предупреждение, try / catch не срабатывает и весь процесс ошибочно завершается как успешный.

Я пробовал:

  1. добавление -WarningAction Stop к команде, и это вызывает попытку / перехват, но ошибка слишком общая:

    Выполнение команды остановлено, поскольку для переменной предпочтения "WarningPreference" или общего параметра задано значение Stop.

  2. Итак, я попытался записать предупреждение в переменную, а также в файл (чтобы проверить позже при сообщении об успехе или сбоях), но все способы, которые я пытался перехватить, оказались неудачными, даже если они постояннона экран выводится предупреждение.

    Set-Distributiongroup @Setparams -WarningVariable cmd_warn
    Set-Distributiongroup @Setparams 3> c:\temp\warnings.txt
    ...
    $command = "Set-Distributiongroup @Setparams"
    iex $command 3> c:\temp\warnings.txt
    

    Но файл и переменная всегда пусты, что я делаю неправильно или пропустил?

1 Ответ

0 голосов
/ 31 января 2019

Вы заявляете, что используете Import-PSSession, который создает (в памяти) модуль с прокси-функциями , который прозрачно вызывает команды с одинаковым именем наудаленная машина , концепция, известная как неявное удаленное взаимодействие .

К сожалению, начиная с Windows PowerShell v5.1 / PowerShell Core 6.2.0-preview.4, реализация этой функции имеет ряд проблем в отношении переменных предпочтения, общих параметров и потоков вывода.

В вашем конкретном случае попробуйте следующий обходной путь :

Invoke-Command { Set-Distributiongroup @Setparams } -WarningVariable cmd_warn
if ($cmd_warn) { ... } # warning was emitted

Обратите внимание, что вызов Invoke-Command здесь сам не выполняет удаленное взаимодействие;это просто локальная оболочка вызова, которая заставляет общий параметр -WarningVariable работать при применении к it .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...