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.
$? Contains the execution status of the last command. It contains True if the last command succeeded and False if it failed. For cmdlets and advanced functions that are run at multiple stages in a pipeline, for example in both process and end blocks, calling this.
Use the command Exit $LASTEXITCODE at the end of the powershell script to return the error codes from the powershell script. $LASTEXITCODE holds the last error code in the powershell script. It is in form of boolean values, with 0 for success and 1 for failure.
$() is a special operator in PowerShell commonly known as a subexpression operator. It is used when we have to use one expression within some other expression. For instance, embedding the output of a command with some other expression.
$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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With