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

无法捕获“代理块页”错误,Invoke RestMethod/Try catch被忽略

  •  0
  • woter324  · 技术社区  · 4 年前

    我在利用 Azure Instance Metadata Service 应用程序编程接口。这只适用于azurevm,这很好,但我需要一些错误处理。问题是,当我在我的开发笔记本电脑(高度锁定的环境)上运行这个程序时,我得到了我们公司的代理块页面,而我尝试的任何东西(没有双关语的意图)都不会捕捉到块页,从而处理错误。

    Invoke-RestMethod 什么都能做。

    try
    {
        $oRequest = Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "http://169.254.169.254/metadata/instance?api-version=2020-06-01"
    }
    catch [System.Net.WebException]
    {
        Throw "An error has occurred: $($_.exception.Message)"
    }
    

    $oRequest 是空的甚至是管道 Out-Null

    我很感激在我的公司环境之外很难解决这个问题,但我希望有人可能经历过这种行为,并有办法捕捉错误。

    我能想到的最好的办法就是做个测试看看 $oRequest公司 为空并处理它,但这似乎不正确,它仍然在PS控制台中显示块消息。

    PowerShell版本7

    T、 内务部

    0 回复  |  直到 4 年前
        1
  •  0
  •   PowerShellGuy    4 年前

    好吧,你得到错误的原因是因为你捕捉到了原来的错误,然后用 throw . 你已经捕捉到了,不需要再抛出一个错误。你不能用管道 out-null 因为没有东西要送到管道里。

    -ErrorAction Stop

    try
    {
        #This is where the exception will be thrown
        $oRequest = Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "http://169.254.169.254/metadata/instance?api-version=2020-06-01" -ErrorAction Stop
    }
    catch [System.Net.WebException] #this catches the error that was thrown above and applies it to the built-in variable $_ for the catch's scope
    {
        #if you uncomment the throw line, notice how you don't reach the next line,
        #this is because it creates a terminating error, and it's not handled with a try/catch
        #throw "bananas"
        $banana = "An error has occurred: $($_.exception.Message)"
    }
    Write-Host $banana