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

如何捕获并处理Azure CLI中az rest命令返回的错误响应

核心问题原因

  • az是外部可执行程序,PowerShell默认的try/catch仅捕获原生PowerShell异常,不会响应外部命令的错误状态
  • 直接赋值仅捕获az的标准输出流,错误输出默认直接打印到控制台,不会存入变量
  • 外部命令的执行状态需要通过内置变量$LASTEXITCODE判断

方案1:通用兼容方案(适配所有PowerShell版本)

通过错误流重定向+退出码判断实现捕获,修改后代码如下:

try {
    # 2>&1 将标准错误流合并到标准输出流,错误内容会存入$rv不会直接打印
    $rv = az rest --method post --url "https://graph.microsoft.com/v1.0/servicePrincipals/$DELIBERATE_ERROR" 2>&1
    # az执行成功时$LASTEXITCODE为0,非0代表执行出错
    if ($LASTEXITCODE -ne 0) {
        # 手动抛出异常触发catch块
        throw "az命令执行失败,错误信息:$rv"
    }

    Write-Host "rv:"
    $rv
}
catch {
    Write-Host "error:"
    $_
}

方案2:高版本PowerShell简化方案(仅PowerShell 7.3+支持)

开启PowerShell对外部命令错误的自动抛出配置,不需要手动判断退出码:

# 开启外部命令非0退出码自动触发错误的配置
$PSNativeCommandUseErrorActionPreference = $true
$ErrorActionPreference = 'Stop'

try {
    $rv = az rest --method post --url "https://graph.microsoft.com/v1.0/servicePrincipals/$DELIBERATE_ERROR" 2>&1
    Write-Host "rv:"
    $rv
}
catch {
    Write-Host "error:"
    $_
}

方案3:结构化解析错误信息

配合az命令的JSON输出参数,可直接解析错误详情:

$rv = az rest --method post --url "https://graph.microsoft.com/v1.0/servicePrincipals/$DELIBERATE_ERROR" --output json 2>&1
if ($LASTEXITCODE -ne 0) {
    # 将错误内容转为JSON对象直接提取字段
    $errorObj = $rv | ConvertFrom-Json
    Write-Host "错误码:$($errorObj.error.code)"
    Write-Host "错误信息:$($errorObj.error.message)"
    Write-Host "请求ID:$($errorObj.error.innerError.'request-id')"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:24:00