PowerShell使用If语句尝试/捕获

时间:2017-08-18 18:08:03

标签: powershell if-statement error-handling try-catch

问题/细节

我在PowerShell中工作并试图找出自定义Try Catch语句的工作原理。我目前的主要问题涉及混合Try / Catch和If语句。所以我想要实现的想法是这样的:

try {
    if (!$someVariable.Text) { throw new exception 0 }
    elseif ($someVariable.Text -lt 11) { throw new exception 1 }
    elseif (!($someVariable.Text -match '[a-zA-Z\s]')) { throw new exception 2}
}
catch 0 {
    [System.Windows.Forms.MessageBox]::Show("Custom Error Message 1")
}
catch 1 {
    [System.Windows.Forms.MessageBox]::Show("Custom Error Message 2")
}
catch 2 {
    [System.Windows.Forms.MessageBox]::Show("Custom Error Message 3")
}

现在我知道上面的代码在实际代码方面是非常不准确的,但我想直观地展示我正在思考和试图实现的目标。

问题

有没有人知道如何使用PowerShell创建自定义错误消息,这可以帮助我实现接近上述想法并解释一下你的答案?提前谢谢

到目前为止,以下链接是我发现的最接近我想要实现的目标:

PowerShell Try, Catch, custom terminating error message

2 个答案:

答案 0 :(得分:3)

您抛出的错误存储在$ _.Exception.Message

$a = 1
try{
    If($a -eq 1){
        throw "1"
    }
}catch{
    if ($_.Exception.Message -eq 1){
        "Error 1"
    }else{
        $_.Exception.Message
    }
}

答案 1 :(得分:2)

我建议使用ThrowTerminatingError() Function New-ErrorRecord { param( [String]$Exception, [String]$ExceptionMessage, [System.Management.Automation.ErrorCategory] $ErrorCategory, [String] $TargetObject ) $e = New-Object $Exception $ExceptionMessage $errorRecord = New-Object System.Management.Automation.ErrorRecord $e, $ErrorID, $ErrorCategory, $TargetObject return $ErrorRecord } Try { If (not condition) { $Error = @{ Exception = 'System.Management.Automation.ParameterBindingException' ExceptionMessage = 'Error text here' ErrorCategory = [System.Management.Automation.ErrorCategory]::InvalidArgument TargetObject = '' } $PSCmdlet.ThrowTerminatingError((New-ErrorRecord @Error)) } } Catch [System.Management.Automation.ParameterBindingException] { 'do stuff' } 方法。这是一个例子:

{{1}}