如何在脚本块中捕获异常?

时间:2016-03-28 00:42:21

标签: powershell powershell-v4.0

我正在尝试使用库函数中的脚本块。我想确保我能够可靠地检测所提供的脚本块中的运行时错误并将其报告回来。在下面的示例中,我创建了一个导致运行时错误的脚本块。

我的期望是catch块会捕获它并打印错误消息。这不会发生。它以红色文本将错误转储到控制台,但控件根本没有传递给catch块。

$cmd = [ScriptBlock]::Create("Get-Content doesnotexist.txt")

$results = ''

try {
    $results = & $cmd
}
catch {
    $results += "Error: $($_.Exception.Message)"
}

"Results: $results"

Results:

PS:>

有人可以帮助我在这个例子中找到错误吗?

1 个答案:

答案 0 :(得分:0)

我不完全确定你为什么这样做。如果发生错误,您将要显示错误,只需在catch中发生错误,然后如果结果不等于null,请让它显示正确的结果。

$cmd = [ScriptBlock]::Create("Get-Content doesnotexist.txt")

$results = ''

try {
    $results = & $cmd
}
catch {
    write-error $_
}

if($results -ne $null){
    write-host "Results: $results"
}
<#else{
    #Error handling here, or have this action happen in the catch
}#>