用于 SSIS / Windows / Powershell 人员的卷曲。
我有一个问题,我有两个 Windows 2012 服务器,我正在尝试远程执行一个 SSIS 包。服务器“D3”是安装了 SSIS 的 SQL 服务器数据库,我可以在 SSIS GUI 中成功执行我的包,也可以通过 DTExec 实用程序使用以下 Powershell 脚本(通常是 cmd,但必须是 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 服务器)执行此调用。我使用调用 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
回顾一下:
- WORKS:在 D3 上本地执行 powershell 脚本到 Invoke-Expression,然后在 D3 上执行 DTExec 实用程序。
- 失败:在 D1 上执行 bat 脚本,该脚本使用 Invoke-Command 执行与 Invoke-Expression 相同的 powershell 脚本(现在必须在 D1 上),然后在 D3 上执行 DTExec 实用程序。
复杂的。基本上我可以在本地正常运行包,但是使用 bat 脚本和 Invoke-Command 会导致 SSIS 包错误出现在 D1 cmd 提示符上。
来自评论
我在 D3 上尝试了一个本地驱动器文件夹“E:\”,并从 D1 执行它,它实际上可以工作(在 D3 上本地执行时也可以) - 我手动复制了那里的文件,看起来已经删除了一些奇怪的用户的安全设置。指向网络共享驱动器文件夹或文件的权限,尽管我的用户和一般用户组都对共享驱动器文件具有与本地文件相同的权限。奇怪的是,当我在 D3 上时,我可以对网络驱动器上的相同文件执行 SSIS 包,但不能从 D1 执行。
回顾:当文件位于本地驱动器“E:\”上时,可以从 D1 执行 D3 上的作业。当 fi 时,无法从 D1 执行 D3 上的作业