我们正在将 SSIS 从 SQL 2008 迁移到 SQL2014。
- 旧操作系统:WINDOWS 2008 R2 SP1
- 新操作系统:WINDOWS 2012 R2
我使用Execute Process Task
将 NFS 共享映射到驱动器。
- 可执行文件:C:\Windows\System32\net.exe
- 参数:使用 Q: :/vol/
当我在普通 CMD(64 位)中执行此命令时,它就可以工作。
当我从 SSIS 运行它时,它失败并显示错误代码“2”。
经过一番挖掘,我发现当我从 32 位 CMD 或 32 位 powershell 运行“net use”命令时它也会失败。
所以它似乎只能在 64 位上运行。
我在 Google 上搜索并检查了 SSIS,发现标志“Run64BitRuntime”已设置为“True”。此外,新机器上还安装了“集成服务”。
NFS Client 当然也安装了。
当我们将整个项目从一台服务器复制到另一台服务器时,我找不到旧服务器上的包和新服务器上的包之间的区别。
我希望有人能帮助我找到解决方案。解决方案中不需要“net use”命令。
如果有其他更好的方法来访问 NFS 共享,那么我会尝试。
答案1
我找到了一个解决方法。
在SSIS“执行进程任务”中:
- 可执行文件:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
- 参数:C:\path\to\script\CreateMapping.ps1
在“CreateMapping.ps1”中:
& (join-path ($pshome -replace "syswow64", "sysnative") powershell.exe) -Command { net use Q: <IP>:/vol/.... }
它实际上做了什么:
- 在 powershell 环境中从 SSIS 运行脚本。
- 打开一个新的 Powershell 会话,但将新的会话设置为 64 位
- 从 64 位版本运行“Net use”命令。
另外,我还阅读了一些其他命令来从 32 位 powershell 完成 64 位 powershell,但这是唯一对我有用的命令。