PowerShellでは、$?
と$LastExitCode
の違いは何ですか?
自動変数について と読みましたが、
$? Contains the execution status of the last operation. It contains TRUE if the last operation succeeded and FALSE if it failed.
$LastExitCode Contains the exit code of the last Windows-based program that was run.
$?
の定義では、成功と失敗の意味を説明していません。
$ LastExitCodeが0の場合にのみ$?
がTrueであると推定したので、私は尋ねますが、驚くべき反例を見つけました:$ LastExitCode = 0 but $ ?= PowerShellの偽。stderrをstdoutにリダイレクトすると、NativeCommandErrorになります。
$LastExitCode
は、ネイティブアプリケーションのリターンコードです。 $?
は、最後のコマンド(コマンドレットまたはネイティブ)がエラーなしで終了したかどうかに応じて、True
またはFalse
を返すだけです。
通常、コマンドレットの失敗は例外を意味し、ネイティブアプリケーションの場合はゼロ以外の終了コードです。
PS> cmd /c "exit 5"
PS> $?
False
PS> cmd /c "exit 0"
PS> $?
True
でコマンドレットをキャンセルする Ctrl+C 失敗としてもカウントされます。ネイティブアプリケーションの場合、設定する終了コードによって異なります。