Пользовательские ошибки и обработка этих пользовательских ошибок в Powershell или .Net - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь создать / выбросить собственные исключения System.Exception в Powershell или .Net и перехватить эти пользовательские исключения, чтобы обработать выброшенное исключение в расширенном методе try-catch.

Пример ниже простоПоказать, чего я на самом деле хочу достичь.Я знаю, что это могло бы быть обработано по-другому с заявлениями case или if-else.

Есть ли способ сделать это?

Я изучил:

  • Создание собственных классов (слишком неудобно)
  • Ошибка записи ... -ErrorAction Stop (не удалось выяснить это)
  • Создание новых экземпляров Error той же ошибки (Couldnне могу понять, как перехватить экземпляр)
  • Попытка использовать $ 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 голосов
/ 04 июня 2019

Самый простой способ сделать это - создать объект PS с известным типом исключения. например:

try
{
    $obj = New-Object System.AccessViolationException
    throw $obj
}
catch [System.AccessViolationException]
{
    "do stuff"
}

Здесь - список всех исключений .net. Я не знаю, охватывает ли это все. Но все, что вам нужно сделать, это создать его с New-object, затем throw это как shwon и catch это где вы хотите. Вы можете выбрать любое произвольное исключение и выбросить его.

Бросок строки по умолчанию сгенерирует System.Management.Automation.RuntimeException

Если вы хотите использовать исключительный тип, который уже не существует, я не уверен, как это сделать без создания класса.

...