我正在尝试将PowerShell脚本作为SQL Server 2016代理作业运行。
当我的Powershell脚本运行时,我正在使用“ Write-Output”生成多行输出。我想将此输出保存到作业历史记录中,并且仅当运行PowerShell脚本的步骤以退出代码0结束时才希望作业继续进行下一步。
我在代理程序作业中使用“ PowerShell”步骤类型。命令文本如下所示。
# Does some stuff that eventually sets the $resultState variable...
Write-Output ("Job complete with result '" + $resultState + "'")
if($resultState -eq "SUCCESS") {
[Environment]::Exit(0);
}
else {
[Environment]::Exit(1);
}
在“高级”设置下,选中“将步输出包括在历史记录中”。如果我从PowerShell脚本中删除了最后的“ if”语句,则可以在历史记录中看到输出,但是作业步骤总是成功的,并继续进行下一步。如果我包含if / else语句,则如果$ resultState不等于“ SUCCESS”(这就是我想要的),则作业步骤将失败,但在作业步骤的历史记录中将不再看到我的输出。
有什么建议吗?
我通过将所有输出行保存到单个变量来解决此问题,如果结果不是我想要的,则将Write-Error
与-ErrorAction Stop
结合使用。这不是我最初尝试做的,因为它不使用退出代码,但是SQL Agent将正确检测作业步骤是否成功,并且我的输出仍可以显示在作业历史记录,因为它将包含在错误消息中。更新的代码:
# Does some stuff that sets the $resultState and saves output lines to $output...
$output += "`r`nJob complete with result '$resultState'"
if($resultState -eq "SUCCESS") {
Write-Output ($output)
}
else {
Write-Error ("`r`n" + $output) -ErrorAction Stop
}