2012-05-19 9 views
39

En PowerShell, ¿cuál es la diferencia entre $? y $LastExitCode?

leí about automatic variables, y dijo:

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

En la definición de $? no explica por qué tener éxito y fallar media.


Lo pregunto porque supuse que $? es verdadera si y sólo si $ LastExitCode es 0, pero me pareció una sorprendente contraejemplo: $LastExitCode=0 but $?=False in PowerShell. Redirecting stderr to stdout gives NativeCommandError.

Respuesta

42

$LastExitCode es el código de retorno de las aplicaciones nativas. $? simplemente devuelve True o False dependiendo de si el último comando (cmdlet o nativo) salió sin error o no.

Para la insuficiencia cmdlets por lo general significa una excepción, para aplicaciones nativas se trata de un código de salida distinto de cero:

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

Cancelación de un cmdlet con Ctrl +C también contará como un fracaso; para aplicaciones nativas, depende del código de salida que establezcan.

+0

Gracias Joey. Yo mismo pensé $? significaba un código de salida distinto de cero, pero acabo de encontrar un contraejemplo sorprendente. Ver http://stackoverflow.com/questions/10666101/powershell-lastexitcode-0-but-false-redirecting-stderr-to-stdout-gives-nat –

+1

Eso es interesante. Creo que esto es un error (porque se comporta de manera incoherente entre diferentes hosts de PowerShell). – Joey

+0

Y diferentes cmdlets: @iex abcde @ por ejemplo, no devuelve $? = False o $ LastExitCode> 0 – majkinetor