我试图在Powershell或.Net中创建/抛出自己的System.Exception并捕获那些自定义的Exception,以在扩展的try-catch方法中处理抛出的Exception。
下面的示例只是为了展示我实际想要完成的工作。我知道,用case或if-else语句可以对它进行不同的处理。
有什么办法吗?
我调查了:
非常感谢您!
示例Powershell脚本:
$j = 1
try{
$i = 1+1
if(i -eq 2){
# Throw custom Exception [ERR_eq_2]: "ERR- $i equals 2"
}else{
# Throw custom Exception [ERR_gt_3]: "ERR- $i doesn't equal 2"
}
}catch [ERR_eq_2]{
$i = $i + $j
$i--
if($i -gt 3){
# Throw custom Exception [ERR_gt_3]: "ERR- $i greater than 3"
}else{
# Do smth then continue
}
}catch [ERR_gt_3]{
Write-Output 'Meow'
#... And so on It's Customized
}catch ...
答案 0 :(得分:0)
最简单的方法是创建一个已知异常类型的PS对象。例如:
try
{
$obj = New-Object System.AccessViolationException
throw $obj
}
catch [System.AccessViolationException]
{
"do stuff"
}
Here是所有.net例外的列表。我不知道是否涵盖所有内容。但是您要做的就是使用New-object
创建它,然后throw
将其创建为shwon,然后catch
将其创建到您想要的任何位置。您可以选择任意异常并将其抛出。
默认的字符串抛出将生成System.Management.Automation.RuntimeException
如果您要使用尚不存在的异常类型,我不确定如何在不创建类的情况下进行操作。