У меня проблема с 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.
Может ли кто-нибудь пролить свет на это для меня?