我正在使用PowerShell创建一个使用使用Forms创建的GUI的应用程序。在尝试保持模块化编程风格的同时,我或多或少地撞到了一堵墙,我似乎无法找到方法,并且希望社区可以提供帮助。
在我的应用程序中,我尝试使用try / catch语句创建自定义错误捕获,但是发现当我调用工厂函数并且该函数有错误时,应用程序将按预期显示所述错误,但是继续处理就好像它成功了......
我甚至尝试使用exit
和break
,但最终出现了一个“未处理的异常”错误,该错误紧跟在我的自定义错误之后。我甚至设置了$ErrorActionPreference = "Stop"
但仍然遇到了这个问题。
以下是我的代码的简化示例,以便您可以看到正在发生的事情:
Button_Click = {
ValidatePathing -BackupPath $BackupPath.Text
If (!(Test-Path $BackupPath.Text)) {
# Attempt to Create it
}
# bunch of code
}
Function ValidatePathing ([string]$BackupPath){
Try {
If (!$BackupPath) {
throw "customError1"
}
If ($BackupPath -match "\|") {
throw "customError2"
}
}
Catch {
If ($_.Exception.Message -eq "customError1") {
[System.Windows.Forms.MessageBox]::Show("some message")
}
ElseIf ($_.Exception.Message -eq "customError2") {
[System.Windows.Forms.MessageBox]::Show("some message")
}
}
}
不幸的是,当代码遇到类似ValidatePathing
的部分并且发生自定义错误时,错误消息将按预期显示,但代码将逐步执行该部分并继续处理其余部分代码,尽管有错误。
有没有人能够很好地了解PowerShell,以解释如何正确处理这样的情况,以便在遇到像这样的嵌套错误后代码停止运行?
答案 0 :(得分:2)
为了确保您的Try
被设置为处理终止错误,请使用$PSCmdlet.ThrowTerminatingError()
。这可以将ErrorRecord
对象作为构造函数,允许您捕获特定的异常类型。