3

Я создал задание агента SQL-сервера с несколькими шагами, которые нужно обрабатывать каждую неделю. Одним из них является сценарий PowerShell, который будет бросать следующее (неперехваченное) пользовательское исключение:Агент SQL-сервера, не сообщающий об ошибке из неперехваченного исключения в сценарии PowerShell

$endfile = Test-Path "C:\Temp\1_${loc}_${lastpayweek}.csv" 
IF ($endfile -eq $true) 
{ 
    throw "target file already exists" 
} 

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

Я зову скрипт PowerShell, как это:

powershell C:\scripts\rename_timesheet_export.ps1 -loc 3 

Почему она сообщила, как успех?

ответ

6

Вы должны установить вам $ ErrorActionPreference остановиться:

$ ErrorActionPreference = "Стоп"

по умолчанию это будет продолжаться, s o когда Powershell вызывается из SQL Agent, задание будет продолжаться с ошибкой, если вы не измените настройку.

У меня есть несколько советов по вызову Powershell от агента SQL здесь: http://blogs.technet.com/b/heyscriptingguy/archive/2013/05/06/10-tips-for-the-sql-server-powershell-scripter.aspx

+0

Я изменил свое исполнение на попытки { PowerShell C: \ Scripts \ export_timesheet_csv.ps1 -loc 3 -locid 102 -ErrorAction ' Stop ' } catch { throw $ _ } и внутри скрипта, сразу после получения параметров командной строки, я выбрасываю исключение. Я получаю тот же сценарий, когда работа сообщает об успехе, но в истории отмечает, что произошло исключение. – defect833

+1

Кажется странным, что вы вызываете powershell.exe на этапе работы sqlps? –

+0

Я удалил вызов powershell.exe с начала инструкции выполнения, и он начал правильно сообщать об ошибках. Похоже, что он вызывал вызов powershell в вызове powershell (SQL job), и исключения не проходили полностью. – defect833