Короткий ответ, я не верю, что вы можете делать то, что пытаетесь.Давайте посмотрим, как я понимаю сценарий.
Параметр для блока catch
- это один или несколько типов исключений, таких как System.Net.WebException
:
try {
$wc = new-object System.Net.WebClient
$wc.DownloadFile("http://www.contoso.com/MyDoc.doc")
} catch [System.Net.WebException], [System.IO.IOException] {
"Unable to download MyDoc.doc from http://www.contoso.com."
} catch {
"An error occurred that could not be resolved."
}
Проще говоряset.
Теперь мы обычно видим эти типы жестко запрограммированными, но вы хотели бы динамически назначать тип в блоке catch в виде переменной:
try {
...
} catch $exceptionType {
catchError
}
Проблема заключается в потребностях catchследовать за типом исключения, а не переменной.Эта переменная будет (если она содержит тип исключения) типа RuntimeType.Вы можете попытаться найти тип исключения из переменной с помощью GetType () или чего-то в этом роде.Net-net, это просто не будет работать.
Поместите универсальный блок catch (без типа) в вашу функцию-скрипт - что угодно, затем передайте значения в вашу функцию catch, и там будет логика ветвленияделайте все, что вы пытаетесь сделать.
try { ... } catch { catchError -Command $command -Exception $_ }
И, если вы не хотите передавать весь объект исключения, вы можете использовать ...
$_.FullyQualifiedErrorId