【问题标题】:Try-Catch block throws You cannot call a null -valued expressionTry-Catch 块抛出您不能调用空值表达式
【发布时间】: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

我做错了什么。有趣的是这在不确定它为什么开始之前并没有发生 - 脚本执行得很好。

【问题讨论】:

  • 检查$_.Exceptionget-member 看它是否有响应属性,我猜它没有,如果它有它是空的。还请在您的 catch 声明中解释您要实现的目标
  • 感谢您抽出宝贵时间 - 使用 catch 我试图解决任何可能导致 try 块失败的错误或问题。在我的代码中被剪断-如果其余调用失败,我想捕获并显示给用户。希望这会有所帮助
  • 在这种情况下,请使用 swonkie 建议的异常属性

标签: powershell try-catch powercli


【解决方案1】:

您的异常的响应属性为空。只需使用

catch { $_.Exception}

虽然从您的示例中不清楚您是否应该捕获此异常或让 PowerShell 处理它。

一般也不要使用Write-Host,像这样输出你的字符串或变量

"Foo"
$bar = "bar"
$bar

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 2015-02-15
    • 2011-03-18
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多