自定义错误和错误处理Powershell或.Net中的自定义错误

时间:2019-06-04 10:53:46

标签: .net powershell exception try-catch

我试图在Powershell或.Net中创建/抛出自己的System.Exception并捕获那些自定义的Exception,以在扩展的try-catch方法中处理抛出的Exception。

下面的示例只是为了展示我实际想要完成的工作。我知道,用case或if-else语句可以对它进行不同的处理。

有什么办法吗?

我调查了:

  • 创建自己的课程(非常不便)
  • 写入错误... -ErrorAction停止(无法弄清楚)
  • 创建具有相同错误的新错误实例(无法弄清楚如何捕获该实例)
  • 尝试使用$ PSItem捕获先前的错误并再次将其抛出,并进行了修改(当我尝试时,多个具有相同错误句柄的捕捉或具有错误句柄和参数的捕捉均不起作用)

非常感谢您!

示例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 ...

1 个答案:

答案 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

如果您要使用尚不存在的异常类型,我不确定如何在不创建类的情况下进行操作。