SSIS 中的 SFTP 文件传输
SFTP file transfer in SSIS
我已经阅读了一大堆不同的论坛,但似乎无法让我的工作。我需要使用 SSIS 将文件从本地计算机传输到 SFTP 服务器。这是我已经完成的工作:
- 我下载了 WinSCP
- 在 WinSCP (
TS_NEW
) 中创建了一个已保存的连接
- 打开保存的连接(以验证)
- 已将
WinSCP.exe
和 WinSCP.com
复制到 SSIS 项目文件夹
- 使用以下脚本创建了文本文件。
option batch on
option confirm off
open sftp://TS_NEW.com
cd C:\Users\zaccheut\Documents\Analytics Project 2018\ThoughtSpot\SSIS File
option transfer binary
put FCT_DC_MONTH.csv /export/xvdb1/skynet/File_Test
exit
在 SSIS 中我的执行进程任务编辑器有这个:
可执行:C:\Users\zaccheut\Documents\Visual Studio 2012\Projects\Skynet Refreshes\Skynet Refreshes\WinSCP.com
参数:/script=C:\Users\zaccheut\Documents\Visual Studio 2012\Projects\Skynet Refreshes\Skynet Refreshes\local2remote.txt
如何在命令行中测试它,我做错了什么?
你没有真正向我们解释哪里出了问题(如果有的话)。
一般来说,类似这样的问题在 WinSCP FAQ 中都有涉及 My script works fine when executed manually, but fails or hangs when run by Windows Scheduler, SSIS or other automation service. What am I doing wrong?
另请参阅 WinSCP 文章 SFTP Task for SSIS/SSDT。
不过,更具体地说,存在以下三个明确的问题。
您已经在交互式 Windows 会话中创建了一个 WinSCP 存储站点。默认情况下,WinSCP 将站点信息存储到 Windows 注册表的 HKCU 配置单元中。您的 SSIS 会话无权访问该配置单元。
理想情况下,您应该创建一个不依赖于存储配置的独立脚本。这特别意味着您的 open
command 应该包含凭据和主机密钥指纹,例如:
open sftp://username:password@TS_NEW.com -hostkey=...
WinSCP GUI can generate such script给你。
另一个问题是您的 cd
命令实际上应该是 lcd
并且路径必须用引号括起来,因为它包含空格。
lcd "C:\Users\zaccheut\Documents\Analytics Project 2018\ThoughtSpot\SSIS File"
同样,WinSCP 参数中的脚本路径必须用引号引起来,因为它包含空格:
/script="C:\Users\zaccheut\Documents\Visual Studio 2012\Projects\Skynet Refreshes\Skynet Refreshes\local2remote.txt"
您还应该将 /log
switch 添加到 WinSCP 参数以启用会话日志记录。这将对您进行调试有很大帮助。生成的脚本(上方)也显示了这一点。
我已经阅读了一大堆不同的论坛,但似乎无法让我的工作。我需要使用 SSIS 将文件从本地计算机传输到 SFTP 服务器。这是我已经完成的工作:
- 我下载了 WinSCP
- 在 WinSCP (
TS_NEW
) 中创建了一个已保存的连接 - 打开保存的连接(以验证)
- 已将
WinSCP.exe
和WinSCP.com
复制到 SSIS 项目文件夹 - 使用以下脚本创建了文本文件。
option batch on
option confirm off
open sftp://TS_NEW.com
cd C:\Users\zaccheut\Documents\Analytics Project 2018\ThoughtSpot\SSIS File
option transfer binary
put FCT_DC_MONTH.csv /export/xvdb1/skynet/File_Test
exit
在 SSIS 中我的执行进程任务编辑器有这个:
可执行:
C:\Users\zaccheut\Documents\Visual Studio 2012\Projects\Skynet Refreshes\Skynet Refreshes\WinSCP.com
参数:
/script=C:\Users\zaccheut\Documents\Visual Studio 2012\Projects\Skynet Refreshes\Skynet Refreshes\local2remote.txt
如何在命令行中测试它,我做错了什么?
你没有真正向我们解释哪里出了问题(如果有的话)。
一般来说,类似这样的问题在 WinSCP FAQ 中都有涉及 My script works fine when executed manually, but fails or hangs when run by Windows Scheduler, SSIS or other automation service. What am I doing wrong?
另请参阅 WinSCP 文章 SFTP Task for SSIS/SSDT。
不过,更具体地说,存在以下三个明确的问题。
您已经在交互式 Windows 会话中创建了一个 WinSCP 存储站点。默认情况下,WinSCP 将站点信息存储到 Windows 注册表的 HKCU 配置单元中。您的 SSIS 会话无权访问该配置单元。
理想情况下,您应该创建一个不依赖于存储配置的独立脚本。这特别意味着您的 open
command 应该包含凭据和主机密钥指纹,例如:
open sftp://username:password@TS_NEW.com -hostkey=...
WinSCP GUI can generate such script给你。
另一个问题是您的 cd
命令实际上应该是 lcd
并且路径必须用引号括起来,因为它包含空格。
lcd "C:\Users\zaccheut\Documents\Analytics Project 2018\ThoughtSpot\SSIS File"
同样,WinSCP 参数中的脚本路径必须用引号引起来,因为它包含空格:
/script="C:\Users\zaccheut\Documents\Visual Studio 2012\Projects\Skynet Refreshes\Skynet Refreshes\local2remote.txt"
您还应该将 /log
switch 添加到 WinSCP 参数以启用会话日志记录。这将对您进行调试有很大帮助。生成的脚本(上方)也显示了这一点。