Итак, у меня есть запланированное задание, которое я выполняю по требованию.

Есть ли способ заставить задачу завершиться в случае возникновения ошибки?

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

В моем скрипте powershell я вызываю метод веб-API на сервере разработки. Как это. Обратите внимание, что обработка исключений только пытается выявить любые проблемы с помощью скрипта, вызывающего веб-запрос, а не самого веб-API. Веб-приложение имеет свою собственную обработку исключений и ведение журнала.

try {
    $order_api = "http://dev-server.testserver.com/api/orderpipeline/Runfolder";
    $order_response = Invoke-WebRequest -Uri $order_api -UseDefaultCredentials -ContentType "application/json" -Method Post -Body $jsonParams -TimeoutSec 10000;
}
catch{
        # Capture exception detail 
        $err_message =  $_.Exception | format-list -force | Out-String;     
        $log_message = $PSCommandPath + "`r`n" + " Something went wrong trying to invoke web request api, exception follows: " +  "`r`n" + $err_message;

        # Write to application event log
        New-EventLog –LogName Application –Source “Order pipeline Script”
        Write-EventLog –LogName Application –Source “Order pipeline Script” –EntryType Error –EventID 1  –Message $log_message
}}

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

Как я могу заставить задачу остановиться, если вызываемая программа встречает исключение?

В скрипте powershell я также делаю одну попытку:

1 ответ1

1

Как я могу заставить задачу остановиться, если вызываемая программа встречает исключение?

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

Пример синтаксиса

try 
{
    $order_api = "http://dev-server.testserver.com/api/orderpipeline/Runfolder";
    $order_response = Invoke-WebRequest -Uri $order_api -UseDefaultCredentials -ContentType "application/json" -Method Post -Body $jsonParams -TimeoutSec 10000;
}
catch
{
    # Capture exception detail 
    $err_message =  $_.Exception | format-list -force | Out-String;     
    $log_message = $PSCommandPath + "`r`n" + " Something went wrong trying to invoke web request api, exception follows: " +  "`r`n" + $err_message;

    # Write to application event log
    New-EventLog –LogName Application –Source “Order pipeline Script”
    Write-EventLog –LogName Application –Source “Order pipeline Script” –EntryType Error –EventID 1  –Message $log_message
    break
}

Дополнительные ресурсы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .