【发布时间】:2014-10-25 21:44:27
【问题描述】:
这里的新用户很高兴成为该网站的一部分。
我有一个调用 rest 方法的 pshell 脚本。
其余调用成功,但是我在控制台中收到非终止错误,提示 catch 变量不能为空。
这里是块:
Function CallingREST($URL,$Body) {
$headers = @{"Content-Type"="application/xml";"Authorization"="Basic YWRtaW46ZGVmYXVsdA=="}
try {Invoke-RestMethod -Headers $headers -Uri $URL -Body $Body -Method Post -ContentType Application/xml }
catch { $result = $_.Exception.Response.GetResponseStream()
$reader = New-Object System.IO.StreamReader($result)
$responseBody = $reader.ReadToEnd();
write-host $responseBody }
}
我得到的错误是:
You cannot call a method on a null-valued expression.
At C:\Users\administrator\Desktop\rough\script.ps1:170 char:21
+ catch { $result = $_.Exception.Response.GetResponseStream()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
我做错了什么。有趣的是这在不确定它为什么开始之前并没有发生 - 脚本执行得很好。
【问题讨论】:
-
检查
$_.Exception和get-member看它是否有响应属性,我猜它没有,如果它有它是空的。还请在您的 catch 声明中解释您要实现的目标 -
感谢您抽出宝贵时间 - 使用 catch 我试图解决任何可能导致 try 块失败的错误或问题。在我的代码中被剪断-如果其余调用失败,我想捕获并显示给用户。希望这会有所帮助
-
在这种情况下,请使用 swonkie 建议的异常属性
标签: powershell try-catch powercli