Почему Write-Error завершает работу сценария? - PullRequest
1 голос
/ 14 января 2020

Все, что я читаю в Интернете, говорит мне, что Write-Error записывает в поток ошибок, но не завершает сценарий, и все же, когда следующий сценарий выполняется, он четко делает завершить сценарий.

Write-Error "This should not terminate the script..."
Write-Information "... and it hasn't"

Вывод:

D:\MyBitsAndBobs\writeerrortest.ps1 : This should not terminate the script...
At D:\MyBitsAndBobs\writeerrortest.ps1:3 char:1
+ Write-Error "This should not terminate the script..."
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,writeerrortest.ps1

Сообщение ".. а это не так" явно никогда не выполняется. Кто-нибудь может пролить свет на это, по-видимому, неожиданное поведение?

Ответы [ 2 ]

1 голос
/ 14 января 2020

Это связано со способом Write-Information по умолчанию.

Согласно документам:

Значение переменной предпочтения $ InformationPreference определяет отображается ли сообщение, которое вы предоставляете в Write-Information, в ожидаемой точке операции скрипта. Поскольку значением этой переменной по умолчанию является SilentlyContinue, по умолчанию информационные сообщения не отображаются. Если вы не хотите изменять значение $ InformationPreference, вы можете переопределить его значение, добавив в команду общий параметр InformationAction.

Так что в вашем случае измените Write-Information на Write-Host или используйте:

Write-Error "This should not terminate the script..."
Write-Information "... and it hasn't" -InformationAction Continue

Выход:

Write-Error "This should not terminate the script..."
Write-information "... and it hasn't" -InformationAction Continue : This should not terminate the script...
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException

... and it hasn't
0 голосов
/ 14 января 2020

Посмотрите на переменную $ErrorActionPreference. По умолчанию он установлен на «Продолжить» и действительно не завершает сценарий. В вашем случае это, вероятно, установлен Стоп. Измените его на $ErrorActionPreference = [System.Management.Automation.ActionPreference]::Continue и снова запустите ваш скрипт. Есть больше настроек, чем эти два, изучить их.

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