我正在尝试将 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 代理会正确检测作业步骤是否成功,并且我的输出仍然可以显示在作业历史记录中,因为它将包含在错误消息中。
更新的代码:
# 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
}
关于sql-server - 如何使用输出和退出代码运行 SQL Server 代理 Powershell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60870210/