Поведение по умолчанию для необработанных исключений в Powershell - PullRequest
0 голосов
/ 05 ноября 2019

Возможно, это не лучший заголовок для этого запроса.

Я знаю, что могу обернуть код Powershell в блок try...catch. Я также знаю, что могу установить переменную $ErrorActionPreference.

Однако вместо того, чтобы обернуть весь скрипт в большой блок Try...Catch, я хотел бы иметь некоторый код по умолчанию, который будет выполняться при необработанномвозникает исключение.

Например, допустим, что произошла непредвиденная ошибка, которая не перехватывается try...catch. Я хотел бы, чтобы PowerShell перед выходом (при условии, что ErrorActionPreference установлено значение STOP) запускает определенный блок кода, чтобы можно было регистрировать или сообщать о непредвиденной ошибке.

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

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

«Хороший» способ - обрабатывать его с помощью блока try..catch. Они в основном используются для нацеливания на определенные разделы кода и обеспечивают целевую обработку исключений. Если вам нужно что-то более глобальное, вы, вероятно, захотите использовать оператор Trap :

function TrapTest {
    trap {"Error found."}
    ...code

    CauseErrorHere

    ....code
}

Ловушки применяются ко всей области (например, функция, сценарий и т. Д.) Изапустить, когда происходит исключение. Это позволяет регистрировать ошибки, а также позволяет продолжить выполнение после того, как возникнет исключение, если хотите.

0 голосов
/ 05 ноября 2019

Для этой цели обычно используется часть finally блока try...catch...finally.

try {
    # do some stuff
}
catch {
    # do some stuff on exception
}
finally {
    # do some stuff regardless of whether we caught an exception
}

Вы также можете иметь только try и finally без catch.

...