问题描述
我正在使用Azure Instance Metadata Service API。这仅适用于Azure VM,这很好,但是我需要一些错误处理。麻烦的是,当我在开发笔记本电脑上(高度锁定的环境)运行它时,我得到了公司代理阻止页面,而我尝试执行的任何操作(没有双关语)都会捕获该阻止页面,从而处理错误。
就像代理在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。一。
解决方法
好吧,得到此错误的原因是因为您正在捕获原始错误,然后使用temp
强制另一个错误发生。您已经捕获了它,无需引发另一个错误。您无法将p
传送到throw
,因为没有任何内容可发送到管道。
尽管并非总是如此,但最好在要捕获错误的cmdlet上throw
。
out-null