$?之间的区别?和PowerShell中的$ LastExitCode

时间:2012-05-19 14:28:45

标签: windows powershell command-line

在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时,我假设$?为True,但我发现了一个令人惊讶的反例: $LastExitCode=0 but $?=False in PowerShell. Redirecting stderr to stdout gives NativeCommandError

1 个答案:

答案 0 :(得分:57)

$LastExitCode是本机应用程序的返回码。 $?只返回TrueFalse,具体取决于最后一个命令(cmdlet或native)是否退出而没有错误。

对于cmdlet,故障通常意味着异常,对于本机应用程序,它是非零退出代码:

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

使用 Ctrl + C 取消cmdlet也将计为失败;对于本机应用程序,它取决于它们设置的退出代码。