2012-05-19 5 views
39

PowerShellでは、$?$LastExitCodeの違いは何ですか?

私はabout automatic variablesを読んで、それは言った:$?の定義において

$? 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である場合にのみ真であることを前提とするので


は、私が聞いて、私は驚くべき反例が見つかりました:$LastExitCode=0 but $?=False in PowerShell. Redirecting stderr to stdout gives NativeCommandErrorを。

答えて

42

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

は通常、例外を意味し、ネイティブアプリケーションのためには、ゼロ以外の終了コードです:

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

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

+0

ありがとうございました。私は自分で$を考えましたか?ゼロ以外の終了コードを意味しますが、私はちょうど驚くべき反例を見つけました。 http://stackoverflow.com/questions/10666101/powershell-lastexitcode-0-but-false-redirecting-stderr-to-stdout-gives-nat –

+1

これは興味深いものです。私はこれがバグであると信じています(異なるPowerShellホスト間で矛盾して動作するため)。 – Joey

+0

異なるコマンドレット:@iex abcde @は、たとえば$?= Falseまたは$ LastExitCode> 0を返しません – majkinetor

関連する問題