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

az sql db show查询不存在数据库时返回$true问题求助

问题原因及解决方法

为什么$?返回$true

  • $?是PowerShell用来判断最后一个执行的PowerShell cmdlet/命令是否成功的变量,它不反映管道中外部命令(比如az)的执行状态。
  • 当目标数据库不存在时,az sql db show会将错误信息输出到标准错误流(stderr),而非标准输出(stdout),因此后续的ConvertFrom-Json接收到的是空输入。空输入不会导致ConvertFrom-Json执行失败,所以$?返回$true。
  • 要获取az命令的真实执行结果,应该查看$LASTEXITCODE变量——外部命令执行完成后,这个变量会记录它的退出码:数据库不存在时,az sql db show会返回非零退出码(通常为1)。

正确的检查方式

方式一:结合退出码和结果对象判断

$result = az sql db show --name "NotExistingDB" --resource-group "rg" --server "server" | ConvertFrom-Json
if ($LASTEXITCODE -ne 0 -or $null -eq $result) {
    Write-Host "数据库不存在"
} else {
    Write-Host "数据库存在"
}

方式二:先验证存在性再获取详情

如果只需要判断存在性,无需获取完整数据,可以直接让az命令静默执行,只检查退出码:

az sql db show --name "NotExistingDB" --resource-group "rg" --server "server" > $null 2>&1
if ($LASTEXITCODE -ne 0) {
    Write-Host "数据库不存在"
} else {
    # 如需获取数据库详情,再执行一次命令转换为JSON
    $result = az sql db show --name "NotExistingDB" --resource-group "rg" --server "server" | ConvertFrom-Json
    Write-Host "数据库存在"
}

方式三:一次性捕获输出和退出码

避免重复执行az命令,同时捕获所有输出和退出状态:

$output = az sql db show --name "NotExistingDB" --resource-group "rg" --server "server" 2>&1
$exitCode = $LASTEXITCODE
if ($exitCode -ne 0) {
    Write-Host "数据库不存在"
} else {
    $result = $output | ConvertFrom-Json
    Write-Host "数据库存在"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:05:17