SSIS中通过Process Task执行PowerShell脚本遇程序集加载失败
解决SSIS Process Task执行PowerShell脚本的DLL加载格式错误问题
这个问题我之前帮同事排查过,大概率是32位/64位运行环境不匹配导致的——毕竟SSIS和PowerShell默认的运行位数可能不一样,直接跑PowerShell没问题,但在SSIS的Process Task里就踩了位数的坑。下面是具体的解决步骤:
1. 调整Visual Studio调试时的SSIS运行位数
默认情况下,32位的Visual Studio会强制SSIS用32位运行时调试,而大多数系统的PowerShell默认是64位的,这就导致了位数不兼容:
- 右键你的SSIS项目 → 选择「属性」
- 切换到「配置属性」→「调试」选项卡
- 将
Run64BitRuntime设置为True,保存后重新调试包
2. 部署到SSISDB时指定64位运行时
如果包是部署到SQL Server的SSIS目录执行,需要在执行配置里明确指定位数:
- 打开SQL Server Management Studio(SSMS),找到你的SSIS包
- 右键选择「执行」→ 进入「配置」界面
- 切换到「高级」选项卡,勾选「使用64位运行时」,再执行包
3. 强制Process Task使用指定位数的PowerShell
如果上面的方法不生效,可以直接在Process Task里指定对应位数的PowerShell路径,避免环境自动选择的问题:
- 64位PowerShell路径:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - 32位PowerShell路径:
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe - 在Process Task的「可执行文件」字段填入上面的路径,然后在「参数」里填写脚本执行命令,比如:
-File "C:\YourScripts\TargetScript.ps1"
4. 确认目标DLL的位数
最后要验证X.dll本身的位数:
- 如果DLL是64位编译的,必须确保SSIS和PowerShell都用64位环境运行;如果是32位DLL,就对应32位环境
- 可以用
dumpbin工具(Visual Studio自带的命令行工具)查看DLL信息,执行命令:dumpbin /headers X.dll,在输出里找「machine」字段,x86是32位,x64是64位
小提示:如果脚本里涉及到数据库连接、文件系统访问等,也要确保对应的驱动(比如ODBC、OLE DB)位数和运行环境一致,不然也可能触发类似的加载错误。
内容的提问来源于stack exchange,提问作者Joel
相关产品推荐
相关产品推荐

