我在Powershell中使用DTEXEC运行一系列SSIS包。这些包位于SSISDB中。
我在运行程序包时没有问题,但是在程序包完成后,我遇到了确定实际结果状态的问题。当从SSISDB运行包时,即使包失败(例如在任务验证期间未找到文件),DTEXEC似乎也会返回ZERO返回码。
我已经尝试查询SSISDB(catalog.executions)以在DTEXEC完成后检查状态(或者我认为它已经完成)。我可以回到状态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然后退出?我做错了什么?
由于