Differences
This shows you the differences between two versions of the page.
ms_windows_ms_sql:powershell_exe_files_in_try_catch [2021/05/25 09:33] – created admin | ms_windows_ms_sql:powershell_exe_files_in_try_catch [2021/05/25 10:45] (current) – admin | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | Powershell некорректно обрабатывает коды выхода из запущенных exe-файлов. \\ | + | **Powershell** некорректно обрабатывает коды выхода из запущенных нативных exe-файлов |
- | Допустим у нас есть команда, | + | Допустим у нас есть команда, |
Вопреки интуитивному ожиданию такая конструкция не сработает: | Вопреки интуитивному ожиданию такая конструкция не сработает: | ||
< | < | ||
Line 12: | Line 12: | ||
Wtite-Host "We got an error!!!" | Wtite-Host "We got an error!!!" | ||
}</ | }</ | ||
- | Не сработает. | + | Мы не получим сообщения **We got an error!!!** при ненулевом коде возврата из **run_buggy_executive.exe**, |
Как же быть? \\ | Как же быть? \\ | ||
- | Вариантов | + | Вариантов |
- | * Вручную проверять код выхода: | + | * Вручную проверять код выхода |
{ | { | ||
doSomething -arg myArg | doSomething -arg myArg | ||
- | if (-not $?) {throw "Failed to doSomething" | + | if (-not $?) { Write-Error -Message |
} | } | ||
catch | catch | ||
{ | { | ||
- | Write-Host -Message "We have a problem. $PSItem" | + | Write-Error -Message "We have a problem. $PSItem" |
+ | }</ | ||
+ | * Второй вариант - гораздо более практичный, | ||
+ | { | ||
+ | doSomething -arg myArg 2>& | ||
+ | } | ||
+ | catch | ||
+ | { | ||
+ | Write-Error -Message "We have a problem. $PSItem" | ||
}</ | }</ | ||
- | + | В итоге - при ошибке код в блоке **Try** остановится на строке, | |
- | < | + | |