Powershell中的`$?`是什么?

时间:2012-05-17 10:36:26

标签: powershell

Powershell中$?的含义是什么?


编辑:TechNet answers在重言式中,没有解释“成功”或“失败”的含义。

  

$?
  包含上次操作的执行状态。如果上一次操作成功则包含TRUE,如果失败则包含FALSE。

我推测$?只会测试$ LastExitCode是否为0,但我找到了counter example其中$?是假,但$ LastExitCode为True。

4 个答案:

答案 0 :(得分:40)

如果最后一个命令成功,则返回true,否则返回false

然而,有许多警告和非显而易见的行为(例如,“成功”究竟是什么意思)。我强烈建议您阅读this article以获得更全面的治疗。

例如,考虑调用Get-ChildItem。

PS> Get-ChildItem 

PS> $? 
    True

$?随着对Get-ChildItem的调用成功,将返回True

但是,如果在不存在的目录上调用Get-ChildItem,则会返回错误。

PS> Get-ChildItem \Some\Directory\Which\Does\Not\Exist
    Get-ChildItem : Cannot find path 'C:\Some\Directory\Which\Does\Not\Exist' because it does not exist.

PS> $?
    False

$?将在此处返回False,因为上一个命令未成功。

答案 1 :(得分:5)

如果最后一个命令导致错误,

$?将包含$false。如果没有,它将包含$true。在 PowerShell v1 天,这是执行错误处理的常用方法。例如,在脚本中,如果要检查是否存在文件,然后打印自定义消息(如果没有),则可以执行以下操作:

Get-Item -Path john -ErrorAction silentlycontinue;
if( -not $?)
{
    'could not find file.';
     exit
 }`

答案 2 :(得分:0)

您还可以使用$zero参数访问最后一个命令的退出代码。

/dev/zero

答案 3 :(得分:0)

我在Windows Server 2019中遇到过$吗?生成标准错误后,可以将其设置为false。在我的示例中,docker-compose通过“标准错误”记录警告,因此尽管以0退出,但$?表示失败。