Powershell: неразрывная ошибка становится ошибкой завершения, если она возникает внутри блока `try` - PullRequest
0 голосов
/ 08 апреля 2020

Мне нужен некоторый указатель, чтобы понять это поведение:

'---------------------------------'
$ErrorActionPreference = 'Continue'

function Do-Something {
    Invoke-WebRequest 'http://www.notexistanthost.xyz/notexistantpath/'
    'first error is non-terminating'

    try
    {
        Invoke-WebRequest 'http://www.notexistanthost.xyz/notexistantpath/'
        'never reached'
    }
    catch
    {
        'second time the same error becomes terminating and go in catch block'
    }

}

Do-Something

Функция, которая обычно возвращает нескончаемую ошибку, с теми же возвращаемыми параметрами, генерирует завершающую ошибку, когда находится внутри блока try.

Почему и когда это происходит? Это связано с каждой функцией?

1 Ответ

0 голосов
/ 08 апреля 2020

Если это работает внутри try / catch, это завершающая ошибка. Это менее известно, но есть 2 вида завершающих ошибок: завершение сценария и завершение команды. Попытка видит ошибку завершения команды и воздействует на нее. «1/0» также является завершающей командой.

try { 1/0; 'hi' } catch { 'caught' } 

caught

«Не удается найти путь» не является завершающей ошибкой:

try { dir foo } catch { 'caught' } 

Get-ChildItem: Cannot find path '/Users/js/foo' because it does not exist.
...