You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何PowerShell处理jfrog命令的$?退出码时判断异常?

核心原因

你混淆了PowerShell的两类判断逻辑:if()语句对外部命令的判断规则,和$?状态变量的作用域。

  1. PowerShell的if(外部命令)判断逻辑
    当你把外部可执行程序(比如jfrog.exe)直接放在if()的括号中时,PowerShell不会判断命令的执行成功与否,只会判断该命令是否向**标准成功输出流(Success Stream)**返回了内容。
    而jfrog config use命令的[Info]、[Error]日志都没有输出到标准成功流,所以无论执行成功还是失败,该命令都不会向标准成功流返回任何内容,if()的判断结果永远为$false,自然两种场景都会进入else分支。
  2. $?变量的正确使用规则
    $?是PowerShell的执行状态变量,对于外部命令而言,它的取值规则确实是:上一条外部命令退出码为0时返回$true,非0时返回$false。但它只会在对应命令执行完成后更新,不能通过把外部命令直接放入if()来自动读取$?的值。
    另外你提到的改法存在语法错误:$LASTEXITCODE=0是赋值操作,会直接把变量设为0,永远返回真,需要用比较运算符-eq做判断。

正确写法

写法1:基于退出码判断(推荐,兼容性更高)

jfrog config use Dummy
if ($LASTEXITCODE -eq 0) {
    Write-Host "Dummy exists"
} else {
    Write-Host "Dummy doesn't exist"
}

写法2:基于$?判断

注意$?必须紧跟在要判断的命令之后,中间不能插入任何其他命令,否则值会被覆盖:

jfrog config use Dummy
if ($?) {
    Write-Host "Dummy exists"
} else {
    Write-Host "Dummy doesn't exist"
}

内容的提问来源于stack exchange,提问作者Ray Depew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:51:00