我在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创建自定义错误消息,这可以帮助我实现接近上述想法并解释一下你的答案?提前谢谢
到目前为止,以下链接是我发现的最接近我想要实现的目标:
答案 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}}