我正在 Powershell 中使用 DTEXEC 运行一系列 SSIS 包。这些包驻留在 SSISDB 中。
我运行包没有问题,但是一旦包完成,我就遇到了确定实际结果状态的问题。从 SSISDB 运行包时,即使包失败(例如,在任务验证期间找不到文件),DTEXEC 也会返回零返回码。
一旦 DTEXEC 完成(或者我认为它已经完成),我试图查询 SSISDB(catalog.executions)以检查状态。我可以恢复状态 2(“正在运行”)。当我添加 5-10 秒的等待时,甚至会发生这种情况。
我怀疑我用来运行 DTEXEC 的代码可能是罪魁祸首。这是我正在使用的功能:
function run_pkg ($DTExecArgs) {
$rc = -1
# Run DTExec
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.Filename = "C:\Program Files\Microsoft SQL Server\110\DTS\Binn\DTExec.exe"
write-host "Starting... " $DTExecArgs
# The next few lines are required to make sure the process waits for
# the package execution to finish
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$pinfo.Arguments = $DTExecArgs
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
$output = $p.StandardOutput.ReadToEnd()
$p.WaitForExit()
$rc = $p.ExitCode
# DTExec Finished
return $rc
}
该函数的参数如下所示:
/isserver \SSISDB\IPTS-DW\ETL\ETL_SYSTYPE_T_PKG.dtsx /server localhost
我认为 WaitForExit() 应该导致脚本等待 DTEXEC 完成。
有任何想法吗?DTEXEC 是否将工作从围栏扔到 ICS 然后退出?我做错了什么?
谢谢