def*_*833 4 sql sql-server error-handling powershell sql-server-agent
我已经设置了一个SQL Server代理程序作业,其中包含一些需要每周处理的步骤.其中一个是PowerShell脚本,它将抛出以下(未捕获的)自定义异常:
$endfile = Test-Path "C:\Temp\1_${loc}_${lastpayweek}.csv"
IF ($endfile -eq $true)
{
throw "target file already exists"
}
Run Code Online (Sandbox Code Playgroud)
现在,当发生这种情况时,我可以在服务器代理历史记录中看到抛出了异常,但仍然报告该步骤是成功的.如果没有失败,服务器代理将不会发送通知电子邮件让我知道失败.
我这样调用PowerShell脚本:
powershell C:\scripts\rename_timesheet_export.ps1 -loc 3
Run Code Online (Sandbox Code Playgroud)
为什么报道成功?
你需要设置$ ErrorActionPreference来停止:
$ ErrorActionPreference ="停止"
默认情况下,此项设置为"继续",因此从SQL Agent调用Powershell时,除非您更改设置,否则作业将继续出错.
我还有一些关于从SQL Agent调用Powershell的技巧:http: //blogs.technet.com/b/heyscriptingguy/archive/2013/05/06/10-tips-for-the-sql-server-powershell- scripter.aspx