我需要在powershell脚本中处理非终止错误。最有效的方法是什么?
将$ErrorActionPreference
变量设置为停止并使用try / catch
$ErrorActionPreference = 'stop'
try{
functionThatCanFail
}catch{
#Do Stuff
}
或者清除$Error
变量,然后评估它是否已填充
$Error.Clear()
functionThatCanFail
if( $Error.Count -ne 0){
#Do Stuff
}
答案 0 :(得分:2)
我会在您的函数中添加private void ButtonClicked(Object sender, ...)
{
var yourTextBox = ((Panel)((Button)sender).Parent).Children.OfType<TextBox>().First();
var yourText = yourTextBox.Text;
}
并将其放入try / catch中
由于CmdletBinding,您现在可以使用参数[CmdletBinding()]
调用您的函数
-ErrorAction Stop
或$ErrorAction
的其他建议也可行,但不是“干净”。方式。
$Error.Clear()
答案 1 :(得分:0)
最简单的方法是使用 -ErrorVariable
/ -ev
公共参数,它会记录给定cmdlet在指定变量中报告的所有非终止错误。
但请注意,此仅适用于 cmdlet 和高级功能 / scripts,因为只有它们支持common parameters - 有关如何将自己的函数定义为高级函数,请参阅Patrick's helpful answer。
# Provoke a non-terminating error and silence it,
# but store it in custom variable $err via common parameter -ErrorVariable
Get-Item /NoSuchFile -ErrorAction SilentlyContinue -ErrorVariable err
if ($err) { # if a / a least one non-terminating error was reported, handle it.
"The following non-terminating error(s) occurred:`n$err"
}
这样,错误分析就是命令范围的,而不必记录会话级$Error
集合的状态或改变其状态。
但请注意,您无法以这种方式处理终止错误。 有关PowerShell错误处理的全面概述,请参阅here。