【发布时间】:2016-07-15 05:46:33
【问题描述】:
我正在尝试使用库函数中的脚本块。我想确保我可以可靠地检测到提供的脚本块中的运行时错误并报告这些错误。在以下示例中,我创建了一个导致运行时错误的脚本块。
我的期望是 catch 块将捕获它并打印错误消息。这不会发生。它以红色文本将错误转储到控制台,但控制根本没有传递给 catch 块。
$cmd = [ScriptBlock]::Create("Get-Content doesnotexist.txt")
$results = ''
try {
$results = & $cmd
}
catch {
$results += "Error: $($_.Exception.Message)"
}
"Results: $results"
Results:
PS:>
有人可以帮我找出这个例子中的错误吗?
【问题讨论】:
-
try catch 只处理终止错误。
$cmd = [ScriptBlock]::Create("Get-Content doesnotexist.txt -ErrorAction Stop") -
@MartinMaat 您引用的帖子包含我需要的信息。 continue 的默认错误操作是我的 try catch 被绕过的原因。如果我将其更改为停止,它将按我预期的方式工作。
-
@Matt 这正是我解决这个脚本问题所需的信息。请将此作为答案发布,以便我接受。
-
如果我找不到一个好的副本(我确信有一个),我会在这里添加一个正确的答案。这里的区别是您显然使用的是脚本块,但问题不在于那个。