83

$?在 PowerShell 中,和有什么区别$LastExitCode

我阅读了有关自动变量的信息,它说:

$? 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。将 stderr 重定向到 stdout 会产生 NativeCommandError

4

1 回答 1

97

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

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

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

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

于 2012-05-19T14:30:39.140 回答