Почему обработка ошибок в powershell ISE и командной строке отличается? - PullRequest
1 голос
/ 22 марта 2019

У меня есть скрипт powershell, который использует Azure Cli для входа в систему и делает кучу других вещей.В начале я устанавливаю

$ErrorActionPreference = "Stop"

Когда я запускаю сценарий в PSE ISE и происходит сбой входа в систему Azure, отображается ошибка и выполнение останавливается, как и ожидалось.Но когда я запускаю сценарий из командной строки ps (или из пакета, который вызывает сценарий), отображается ошибка - и выполнение продолжается?!

Я попытался с помощью try / catch, то же самое там,Улов ловят только в ISE, но не из командной строки.

Это кажется ОЧЕНЬ странным для меня.У кого-нибудь есть идея, что вызывает это и как я могу обойти это?Перезагрузка не помогла: -)

1 Ответ

0 голосов
/ 11 июня 2019

этот ответ может быть немного поздно, но у меня была та же проблема с подключением к EWS. Он работал нормально с Powershell ISE, но не работал с Powershell.exe.

После нескольких часов тестирования я наконец понял, что между Powershell и ISE есть разница в том, как они обрабатывают ошибки.

$errorlength = $Error.Count
$EmailAddress= Get-Mailbox -Identity $shortname.SamAccountName| Select-Object WindowsEmailAddress
if($errorlength -lt $Error.Count){
    throw "Bad thing happened"
}

Моя проблема заключалась в том, что некоторые почтовые ящики в нашем списке адресов находятся в облаке office365, а некоторые - на сервере Exchange. Каким-то образом Powershell ISE завершился с ошибкой, а сам Powershell - нет.

Если ваша ошибка также постоянно возникает в одной и той же позиции, это должно сработать и для вас.

Вынуждает программу завершиться, если обнаруживается ошибка.

...