PowerShell перехватывает типизированные исключения

У меня проблема с PowerShell, когда он не перехватывает исключение, даже если исключение явно упоминается в команде catch.

В этом случае я пытаюсь определить, работает ли еще ProcessID, и если нет, то он предпримет некоторые действия.

Пример блока кода, с которым я борюсь, следующий:

    try {
      Get-Process -Id 123123 -ErrorAction 'Stop'
    } 
    catch [Microsoft.PowerShell.Commands.ProcessCommandException] {
      "Caught by Exception Type: Process is missing"
    }
    catch {
    if ($_.Exception.getType().FullName -eq "Microsoft.PowerShell.Commands.ProcessCommandException") {
      "Caught by Catch All: Process is missing"
      }
    }

Когда этот блок кода выполняется, на выходе получается:

Caught by Catch All: Process is missing

Вы ожидаете, что первое условие catch сработает, поскольку оно правильно называет выброшенное исключение, но оно не срабатывает.

Что еще хуже, когда запускается вторая команда catch (которая что-либо улавливает), она запрашивает имя типа исключения и проверяет, является ли оно «Microsoft.PowerShell.Commands.ProcessCommandException» (каким оно является), а затем принимает соответствующие шаги.

Я знаю, что могу обойти это, но чувствую, что мне не хватает фундаментального способа обработки исключений в PowerShell.

Может ли кто-нибудь пролить свет на это для меня?

16
задан David Thomas 5 December 2011 в 05:08
поделиться