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
相关产品推荐
相关产品推荐

