代码之家  ›  专栏  ›  技术社区  ›  ubienewbie

如何处理来自AZ REST的错误响应

  •  0
  • ubienewbie  · 技术社区  · 3 年前

    如何从Azure CLI az rest命令捕获和处理错误响应?

    如果我将以下内容粘贴到控制台(Windows上运行的Powershell 7.1),我会看到一些写入控制台的错误文本,但它实际上不会抛出将进入catch块的内容,也不会将任何内容写入$rv。

    我在这里遗漏了什么?我如何在出错后检查az rest的返回值?

    try {
        $rv = (az rest --method post --url "https://graph.microsoft.com/v1.0/servicePrincipals/$DELIBERATE_ERROR") #--body $body)           
    
        Write-Host "rv:"
        $rv
    }
    catch {
        Write-Host "error:"
        $error
    }
    

    注意:我还将上述内容保存在一个名为Untitled-2的文件中。ps1并运行了它,但您可以将其复制/粘贴到控制台中。

    PS D:\code\Powershell> .\Untitled-2.ps1
    
    ERROR: Bad Request({"error":{"code":"BadRequest","message":"Write requests (excluding DELETE) must contain the Content-Type header declaration.","innerError":{"date":"2021-09-13T06:02:39","request-id":"447b4cdc-cc43-4e38-a960-d389a3ea3a87","client-request-id":"447b4cdc-cc43-4e38-a960-d389a3ea3a87"}}})
    rv:
    PS D:\code\Powershell>
    
    0 回复  |  直到 3 年前
        1
  •  0
  •   SaiSakethGuduru    3 年前

    非常感谢。 John Hanley 。将您的建议作为答案发布,以帮助其他社区成员。

    因为$rv是写入stdout的结果,您希望捕获stderr。

    来自stdout的数据将是字符串,而stderr生成 系统经营自动化错误记录对象。

    ```swift
    $allOutput = & myprogram.exe 2>&1
    $stderr = $allOutput | ?{ $_ -is [System.Management.Automation.ErrorRecord] }
    $stdout = $allOutput | ?{ $_ -isnot [System.Management.Automation.ErrorRecord] }
    ```  
    

    和 如果您想在启动过程中捕获标准输出和错误,而不发送到文件。

    Start-Process
         [-FilePath] <String>
         [[-ArgumentList] <String[]>]
         [-Credential <PSCredential>]
         [-WorkingDirectory <String>]
         [-LoadUserProfile]
         [-NoNewWindow]
         [-PassThru]
         [-RedirectStandardError <String>]
         [-RedirectStandardInput <String>]
         [-RedirectStandardOutput <String>]
         [-WindowStyle <ProcessWindowStyle>]
         [-Wait]
         [-UseNewEnvironment]
         [-WhatIf]
         [-Confirm]
         [<CommonParameters>]
    

    检查 Start Process 为了更好地理解,请编写文档。

    还要检查 SO1 SO2 提供相关信息。