web-dev-qa-db-ja.com

$の違いは? PowerShellの$ LastExitCode

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になります。

55
Colonel Panic

$LastExitCodeは、ネイティブアプリケーションのリターンコードです。 $?は、最後のコマンド(コマンドレットまたはネイティブ)がエラーなしで終了したかどうかに応じて、TrueまたはFalseを返すだけです。

通常、コマンドレットの失敗は例外を意味し、ネイティブアプリケーションの場合はゼロ以外の終了コードです。

PS> cmd /c "exit 5"
PS> $?
False
PS> cmd /c "exit 0"
PS> $?
True

でコマンドレットをキャンセルする Ctrl+C 失敗としてもカウントされます。ネイティブアプリケーションの場合、設定する終了コードによって異なります。

61
Joey