通过DTExec远程执行SSIS包:ForEach循环文件枚举器为空

时间:2016-11-09 07:09:09

标签: powershell batch-file ssis invoke-command dtexec

为SSIS / Windows / Powershell人卷曲。

我有一个问题,我有两个Windows 2012服务器,我正在尝试远程执行SSIS包。服务器“D3”是安装了SSIS的SQL服务器数据库,我能够在SSIS GUI中成功执行我的包,也可以使用以下Powershell脚本通过DTExec实用程序(通常是cmd,但必须是powershell,因为进一步使用invoke-command):

Powershell脚本ExecCommandImportSEMA.ps1如下所示:

$command = @'
cmd.exe /C 'DTEXEC.exe /File "E:\Contact Management File Archive\SSIS Project\Integration Services Project1\Integration Services Project1\SEMA_Response_File_Load.dtsx" /De "(password here)"'
'@
Invoke-Expression -Command:$command

从D3数据库服务器执行此命令时,这没关系。

但是,我实际上需要从D1(其他Windows 2012服务器)执行此调用。我使用调用Invoke-Command来使DTExec从其他服务器运行。我使用这个bat脚本执行此操作(必须是用于上游兼容性的bat)。

powershell invoke-command -ComputerName D3 -FilePath 'E:\ETLJobs\ExecCommandImportSEMA.ps1'
PAUSE

这在ForEach循环组件(查找文件的第一个进程)中出现以下错误时失败,该错误从生命所在的同一个D3服务器中获取文件(是的,那里存在文件):

Warning: 2016-11-09 17:28:39.06
   Code: 0x8001C004
   Source: Foreach Loop Container Loop through each file
   Description: The For Each File enumerator is empty. The For Each File enumer
ator did not find any files that matched the file pattern, or the specified dir
ectory was empty.
End Warning

回顾:

  • 工作:在D3上本地执行powershell脚本到Invoke-Expression,然后在D3上执行DTExec实用程序。
  • FAILS:在D1上执行bat脚本,使用Invoke-Command执行相同的powershell脚本(现在必须在D1上)到Invoke-Expression,然后在D3上执行DTExec实用程序。

复合。基本上我可以在本地运行包,但是使用bat脚本和Invoke-Command会导致在D1 cmd提示符下出现SSIS包错误。

来自评论

我在D3上尝试了一个本地驱动器文件夹“E:\”并从D1执行它实际上工作(在D3上本地执行时也有效) - 我手动复制文件并看起来已经删除了一些奇怪的用户退出安全设置。指向网络共享驱动器文件夹或文件的权限,尽管我的用户和一般用户组都对共享驱动器文件具有与本地文件相同的权限。奇怪的是,当我在D3上时,我可以执行SSIS包对网络驱动器上的相同文件,而不是D1。

回顾:当文件在本地驱动器“E:\”上时,CAN可以从D1执行D3上的作业。当fi

时,不能从D1执行D3上的作业

0 个答案:

没有答案