sql-server - 如何使用输出和退出代码运行 SQL Server 代理 Powershell 脚本

标签 sql-server powershell sql-server-2016 sql-server-agent

我正在尝试将 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/

相关文章:

SQL 等效于 c# 中的 Math.Floor()

Powershell 日期时间空值

sql-server - 如何检查 SQL Server 表中是否存在列

sql - 合并 - 仅在值发生更改时更新

sql - SQL Server/Azure 中空值 "not working"的总和

sql-server - 如何仅可视化层次结构中节点的后代、祖先和自身?

Powershell - 添加到 $Error

powershell - 在 Powershell 中使用变量 Get-ADUser -Filter

sql-server - SQL 计算列规范中的 if 语句

sql - 如何获取 varchar(MAX) 字符串类型的 XML 标记的值?