Как «получить» контекст исключения для обработки ошибок? - PullRequest
0 голосов
/ 25 сентября 2018

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

Что я по сути хочу сделать, так это скажем, как только я попытался запустить сценарий, я получил исключение из политики выполнения из-за несанкционированного доступа для запуска сценария.

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

Вместо этого я хочу получить часть строки исключения сразу из консоли, а затем намекнуть, каким может быть решение.

есть ли такая опция?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Я собираюсь использовать метод File.WriteAllLines для моего примера здесь.Если ваша цель состоит в том, чтобы иметь один оператор catch, вы можете использовать переключатель для сообщения об исключении:

$ErrorActionPreference = 'Stop'
try
{
    [System.IO.File]::WriteAllLines('C:\Temp\test.txt', 'Test message')
}
catch
{
    switch -Regex ($PSItem.Exception.Message)
    {
        'null'
        {
            'null path passed!'
        }

        'invalid'
        {
            'bad path passed!'
        }

        default
        {
            'didn''t catch this case!'
        }
    }
}

Однако этот способ не очень удобен в обслуживании.Лучшим способом было бы перехватить разные исключения:

$ErrorActionPreference = 'Stop'
try
{
    [System.IO.File]::WriteAllLines('C:\Temp\test.txt', 'Test message')
}
catch [System.ArgumentNullException]
{
    'null path passed!'
}
catch [System.IO.DirectoryNotFoundException]
{
    'bad path passed!'
}
catch
{
    'didn''t handle this case!'
}

Для вашего случая исключения запускается скрипт:

try
{
    & 'C:\myscript.ps1'
}
catch [System.Management.Automation.PSSecurityException]
{
     "Execution policy bad! $PSItem"
}
catch
{
    "This exception was thrown by something in the script and not caught: $PSItem"
}
0 голосов
/ 25 сентября 2018

Вы можете использовать метод Try Catch в Powershell.В сочетании с переключателем вы можете отсортировать сообщения, которые хотите отображать.

try{
    sdasdasdad
}catch [System.Exception]{
    switch ($_.Exception.GetType().FullName){
        "System.Management.Automation.CommandNotFoundException"{
            "No Command Found. Please try a diffrent command."
        }
        default { 
            $_.Exception.message
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...