1. ホーム
  2. windows

[解決済み] PowerShellの$?と$LastExitCodeの違いについて

2022-03-06 01:48:12

質問

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 になりますが、意外な反例を発見しました。 PowerShellでは$LastExitCode=0だが$?=Falseになる。stderrをstdoutにリダイレクトするとNativeCommandErrorが発生します。 .

解決方法は?

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

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

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

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