$?
Powershell中的含义是什么?
编辑:TechNet以重言式回答,没有解释“成功”或“失败”的含义。
美元?
包含上次操作的执行状态。如果最后一个操作成功则包含 TRUE,如果失败则包含 FALSE。
我假设 $? 会简单地测试 $LastExitCode 是否为 0,但我发现了一个反例$? 为假,但 $LastExitCode 为真。
true
如果最后一个命令成功,则返回,否则返回false
。
然而,有一些警告和不明显的行为(例如,“成功”的确切含义)。我强烈建议阅读这篇文章以获得更全面的治疗。
例如,考虑调用 Get-ChildItem。
PS> Get-ChildItem
PS> $?
True
美元?将True
在调用 Get-ChildItem 成功时返回。
但是,如果您在不存在的目录上调用 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
这里,因为之前的命令不成功。
$?
将包含$false
最后一个命令是否导致错误。$true
如果没有,它将包含。在PowerShell v1时代,这是进行错误处理的常用方法。例如,在脚本中,如果您想检查文件是否存在,如果不存在则打印自定义消息,您可以执行以下操作:
Get-Item -Path john -ErrorAction silentlycontinue;
if( -not $?)
{
'could not find file.';
exit
}`
您还可以使用$LastExitCode
参数访问最后一个命令退出代码。
# run some command
# ...
if ((! $?) -and $ErrorAction -eq "Stop") { exit $LastExitCode }
我在 Windows Server 2019 中遇到过,$? 生成标准错误时可以设置为 false。在我的示例中,docker-compose 通过标准错误记录警告,因此尽管以 0 退出,$? 表示失败。