Difference between $? and $LastExitCode in PowerShell

command-line, powershell, windows

Solution

`$LastExitCode` is the return code of native applications. `$?` just returns `True` or `False` depending on whether the last command (cmdlet or native) exited without error or not.

For cmdlets failure usually means an exception, for native applications it's a non-zero exit code:

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

Cancelling a cmdlet with Ctrl+C will also count as failure; for native applications it depends on what exit code they set.

Problem

In PowerShell, what is the difference between `$?` and `$LastExitCode`? I read about automatic variables, and it said: `$? 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.` In the definition of `$?` it doesn't explain what succeed and fail mean. I ask because I presumed that `$?` is True if and only if $LastExitCode is 0, but I found a surprising counter-example: $LastExitCode=0 but $?=False in PowerShell. Redirecting stderr to stdout gives NativeCommandError.

Original source

Related problems