Powershell: выброс исключения в блоке Catch завершается, но не выводит исключение на консоль - PullRequest
0 голосов
/ 07 мая 2020

Недавно у меня возникла эта странная проблема, когда мое исключение перехватывалось в моем блоке catch, но при повторном вызове оно завершает сценарий (как и ожидалось), но не записывает повторно созданное исключение в консоль. Меня не беспокоит выбрасываемое исключение specifici c, меня интересует только то, что исключение генерируется повторно, а трассировка стека выводится на консоль. Я использую PowerShell 4.

try {
    $variable1 = 'value1'
    $variable2 = 'value2'
    [string[]]$variable3 = 'value3'

    [Collections.Generic.List[Microsoft.PowerShell.Commands.MatchInfo]]$matches = New-Object Collections.Generic.List[Microsoft.PowerShell.Commands.MatchInfo]
    $matches = `
        Get-Matches `
            -Param1 $variable1 `
            -Param2 $variable2 `
            -Param3 $variable3 `
            -Silent $true

    Write-Host `n`nTotal Matches Found: $matches.Count
} catch {
    throw $_
}

Я также попытался внести следующие изменения в блок catch:

} catch {
    throw
}
} catch {
    throw $_.Exception
}
} catch {
    throw $_.Exception.Message
}
} catch {
    throw $error[0].Exception
}
} catch {
    throw $error[0].Exception.Message
}

1 Ответ

0 голосов
/ 09 мая 2020

Чтобы вывести исключение на экран в вашем блоке catch, используйте следующее:

try {
    #code
} catch {
    #handle exception
    Write-Output $_.Exception.Message
} 

Кроме того, ваш throw должен быть в вашем операторе try. Нет смысла генерировать исключение в блоке catch, поскольку он уже был сгенерирован и пойман, чтобы быть там!

try {
    #code
    if($something -ne $right) {
        throw "Something isn't right!" 
    } 
} catch {
    #handle exception
    Write-Output $_.Exception.Message
} 
...