Powershell中$?
的含义是什么?
编辑:TechNet answers在重言式中,没有解释“成功”或“失败”的含义。
$?
包含上次操作的执行状态。如果上一次操作成功则包含TRUE,如果失败则包含FALSE。
我推测$?只会测试$ LastExitCode是否为0,但我找到了counter example其中$?是假,但$ LastExitCode为True。
答案 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退出,但$?表示失败。