如何使用输出和退出代码运行SQL Server Agent Powershell脚本

问题描述 投票:0回答:1

我正在尝试将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”(这就是我想要的),则作业步骤将失败,但在作业步骤的历史记录中将不再看到我的输出。

有什么建议吗?

sql-server powershell sql-server-2016 sql-server-agent
1个回答
0
投票

我通过将所有输出行保存到单个变量来解决此问题,如果结果不是我想要的,则将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 }

© www.soinside.com 2019 - 2024. All rights reserved.