Powershell & SQL 作业 - 传递错误,因此作业步骤将失败

Powershell & SQL Jobs - Passing errors so job step will fail

大家好,

我希望有人能在这里帮助我。我是一个完整的 powershell n00b,我被分配了以下任务。

我们有一个 SQL Server 2019 作业,其中 运行 有几个存储过程,然后我们有一个步骤在删除服务器上调用 powershell 命令。我们运行目前的命令是:

INVOKE-COMMAND -ComputerName remoteServer -ScriptBlock {D:\EXEs\application.bat 35 0 0 0 [PathDirectory] 0 A}

这个批处理文件很简单。看起来像:

@echo off
set CUR_YYYY=%date:~10,4%
set CUR_MM=%date:~4,2%
set CUR_DD=%date:~7,2%
set CUR_HH=%time:~0,2%
if %CUR_HH% lss 10 (set CUR_HH=0%time:~1,1%)

set CUR_NN=%time:~3,2%
set CUR_SS=%time:~6,2%
set CUR_MS=%time:~9,2%

set SUBFILENAME=%CUR_YYYY%%CUR_MM%%CUR_DD%-%CUR_HH%%CUR_NN%%CUR_SS%

D:\EXEs\InDesignPDFgen3\InDesignPDFgen.exe %1 %2 %3 %4 %5 %6 %7 > D:\EXEs\InDesignPDFgen3\Logs\output-%SUBFILENAME%.log 2> D:\EXEs\InDesignPDFgen3\Logs\error-%SUBFILENAME%.log

这只是 运行 实际的应用程序。它还在每个 运行 上创建 2 个文本文件以及第二个的日期戳。一个捕获进程 运行s 时的输出,第二个是错误文件。我相信这也可以在 powershell 中完成。

这是我们 运行 遇到问题的地方。应用程序的第一部分从 SQL 中提取数据,然后 运行 在设计中创建一堆 PDF。此应用程序有时会崩溃。在我们通过批处理文件获得日志文件之前,我们无法判断进程崩溃的位置以查明发生了什么。但是现在我们正在使用批处理文件,如果它崩溃了,它会通过批处理文件记录它,但是我们在 SQL 服务器中的作业步骤通过并允许其他东西 运行 包含错误数据。如果出现问题,我们需要工作失败,但随机搜索并不能涵盖我们正在寻找的所有内容,而且我似乎无法让脚本工作。我确信这一切都可以通过一个 powershell 脚本来完成。我是一名 SQL 开发人员,老实说,编程让我头疼。希望有人有过类似的经历,可以在这里帮助我。

提前致谢

Powershell 将 return 退出代码为零,除非您抛出错误。在 运行 exe 之后检查 $LASTEXITCODE 并抛出 if non-zero:

INVOKE-COMMAND -ComputerName remoteServer -ScriptBlock {D:\EXEs\application.bat 35 0 0 0 [PathDirectory] 0 A;if($LASTEXITCODE -ne 0) {throw "Non-zero exit code: $LASTEXITCODE"}}