Jak mogę sprawić, aby Powershell zachowywał się jak Bash z flagą set -e
? set -e
tworzy skrypt Bash "Wyjdź natychmiast, jeśli proste polecenie zostanie zakończone ze statusem niezerowym".Powershell analogiczny z Bash `set -e`
Pomyślałem, że mogę to zrobić, ustawiając $ErrorActionPreference="Stop"
, ale to nie działa. Załóżmy, że mam skryptu a.ps1
$ErrorActionPreference="Stop"
& cmd /c "exit 1"
echo "cmd exited `$LastExitCode=$LastExitCode and `$?=$?"
Jeśli go uruchomić
.\a. ; echo "a.ps1 exited `$LastExitCode=$LastExitCode `$?=$?"
Do moich niespodzianek drukuje
cmd exited $LastExitCode=1 and $?=False
a.ps1 exited $LastExitCode=1 $?=True
Co się dzieje ?! Oczekuję, że a.ps1 wyjdzie po pierwszym wierszu, rzucając błąd i ustawiając $? do fałszywego.
Czy istnieje oficjalna dokumentacja wyjaśniająca $ ErrorActionPreference? Wszystko, co znalazłem, to this post na blogu o kawie.
Shucks, to frustrujące. Dzięki za funkcję, wykorzystam to. –
Ta funkcja działa świetnie. Zmieniłem test '! $?' Na '$ LastExitCode -ne 0' ponieważ' $? 'Jest zepsute http://stackoverflow.com/questions/10666101/powershell-lastexitcode-0-but-false-redirecting-stderr- to-stdout-give-nat –
Tak, było. Zauważyłem również, że Twój błąd może wymagać dostosowania w każdym przypadku;) – Joey