【问题标题】:Custom Errors and Error-Handling those custom errors in Powershell or .Net自定义错误和错误处理 Powershell 或 .Net 中的自定义错误
【发布时间】:2019-10-19 21:33:57
【问题描述】:

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

下面的例子只是为了展示我真正想要完成的事情。我确实知道,它可以用 case 或 if-else 语句进行不同的处理。

有什么办法吗?

我已经调查过了:

  • 创建自己的类(太不方便了)
  • Write-Error ... -ErrorAction Stop(想不通)
  • 创建相同错误的新错误实例(无法弄清楚如何捕获该实例)
  • 尝试使用 $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 ...

【问题讨论】:

    标签: .net powershell exception try-catch


    【解决方案1】:

    最简单的方法是创建一个已知异常类型的 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

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

    【讨论】:

    • 谢谢,成功了。
    猜你喜欢
    • 2018-10-12
    • 2013-12-04
    • 2013-02-12
    • 2011-01-29
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    相关资源
    最近更新 更多