2012-05-19 9 views
39

In PowerShell, qual è la differenza tra $? e $LastExitCode?

ho letto about automatic variables, e disse:

$? 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.

Nella definizione del $? non spiega che cosa riesce e non riescono media.


Lo chiedo perché ho presunto che $? è vero se e solo se $ LastExitCode è 0, ma ho trovato una sorprendente contro-esempio: $LastExitCode=0 but $?=False in PowerShell. Redirecting stderr to stdout gives NativeCommandError.

risposta

42

$LastExitCode è il codice di ritorno delle applicazioni native. $? restituisce semplicemente True o False a seconda che l'ultimo comando (cmdlet o nativo) sia uscito senza errori o meno.

Per mancata cmdlet solito significa un'eccezione, per applicazioni native è un codice diverso da zero uscita:

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

Annullamento di un cmdlet con Ctrl +C sarà anche considerato come guasto; per le applicazioni native dipende da quale codice di uscita impostano.

+0

Grazie Joey. Io stesso pensavo $? significava codice di uscita diverso da zero, ma ho appena trovato un controesempio sorprendente. Vedi http://stackoverflow.com/questions/10666101/powershell-lastexitcode-0-but-false-redirecting-stderr-to-stdout-gives-nat –

+1

Questo è interessante. Credo che questo sia un bug (perché si comporta in modo incoerente tra diversi host PowerShell). – Joey

+0

E diversi cmdlet: @iex abcde @ per esempio non restituisce né $? = False o $ LastExitCode> 0 – majkinetor