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

Powershell 通过DTExec远程执行SSIS包:ForEach循环文件枚举器为空,powershell,batch-file,ssis,invoke-command,dtexec,Powershell,Batch File,Ssis,Invoke Command,Dtexec,为SSIS/Windows/Powershell用户提供的卷发 我有一个问题,我有两台Windows 2012服务器,我试图远程执行SSIS包。服务器“D3”是安装了SSIS的SQL Server数据库,我能够在SSIS GUI中成功执行我的包,也可以通过DTExec实用程序使用以下Powershell脚本(通常为cmd,但由于使用了下面的invoke命令,因此必须为Powershell): Powershell脚本ExecCommandImportSEMA.ps1如下所示: $command

为SSIS/Windows/Powershell用户提供的卷发

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

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服务器)执行此调用。我使用callinvoke命令从另一台服务器运行DTExec。我使用这个bat脚本(必须是用于上游兼容性的bat)来实现这一点

此操作失败,ForEach循环组件(查找文件的第一个进程)中出现以下错误,该组件从is所在的同一台D3服务器上拾取文件(是的,文件确实存在):

重述:

  • 工作:在D3上本地执行powershell脚本以调用表达式,然后在D3上执行DTExec实用程序
  • 失败:在D1上执行bat脚本,该脚本使用Invoke命令执行相同的powershell脚本(现在必须在D1上)来调用表达式,然后在D3上执行DTExec实用程序
复杂的。基本上,我可以在本地很好地运行包,但是使用bat脚本和Invoke命令会导致在D1 cmd提示符上出现SSIS包错误

根据评论

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


重述:当文件位于本地驱动器“E:\”上时,可以从D1在D3上执行作业。当fi重新声明:在D3上运行程序包,它会很好地拾取文件时,无法从D1在D3上执行作业。从D1远程启动D3上的包,但它找不到文件/路径。通常,这是权限或路径设置。哪个帐户在D3上成功运行了它?这和D1是同一账户吗?源文件位于哪里?是本地文件夹还是远程文件夹。如果是远程的,您使用的是映射驱动器还是UNC?正确-通过D3上的GUI和Powershell脚本,软件包可以正常运行,但在D1上不能。两者都使用我自己的帐户执行。我也尝试过以管理员的身份运行D1 bat脚本来启动这个包,但没有用。正在使用映射的网络驱动器存储源文件,但也尝试了D3上的本地驱动器文件夹“E:\”,但没有成功。我尝试了D3上的本地驱动器文件夹“E:\”,并从D1开始执行,它实际起作用(在D3上本地执行时也起作用)-我手动复制了那里的文件,看起来已经从安全设置中删除了一些奇怪的用户。指向对网络共享驱动器文件夹或文件的权限,尽管“我的用户”组和“常规用户”组对共享驱动器文件的权限与对本地文件的权限相同。奇怪的是,当我在D3上时,我可以执行SSIS包,但在网络驱动器上可以执行相同的文件,而不是从D1执行。重述:当文件在本地驱动器“E:\”上时,我可以从D1在D3上执行作业。当文件位于网络驱动器上时,无法从D1在D3上执行作业。当文件在网络驱动器上时,可以从D3在D3上执行作业。哦,这闻起来像是一个需要重申的问题:在D3上运行包,它可以很好地拾取文件。从D1远程启动D3上的包,但它找不到文件/路径。通常,这是权限或路径设置。哪个帐户在D3上成功运行了它?这和D1是同一账户吗?源文件位于哪里?是本地文件夹还是远程文件夹。如果是远程的,您使用的是映射驱动器还是UNC?正确-通过D3上的GUI和Powershell脚本,软件包可以正常运行,但在D1上不能。两者都使用我自己的帐户执行。我也尝试过以管理员的身份运行D1 bat脚本来启动这个包,但没有用。正在使用映射的网络驱动器存储源文件,但也尝试了D3上的本地驱动器文件夹“E:\”,但没有成功。我尝试了D3上的本地驱动器文件夹“E:\”,并从D1开始执行,它实际起作用(在D3上本地执行时也起作用)-我手动复制了那里的文件,看起来已经从安全设置中删除了一些奇怪的用户。指向对网络共享驱动器文件夹或文件的权限,尽管“我的用户”组和“常规用户”组对共享驱动器文件的权限与对本地文件的权限相同。奇怪的是,当我在D3上时,我可以执行SSIS包,但在网络驱动器上可以执行相同的文件,而不是从D1执行。重述:当文件在本地驱动器“E:\”上时,我可以从D1在D3上执行作业。当文件位于网络驱动器上时,无法从D1在D3上执行作业。当文件在网络驱动器上时,可以从D3在D3上执行作业
powershell invoke-command -ComputerName D3 -FilePath 'E:\ETLJobs\ExecCommandImportSEMA.ps1'
PAUSE
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