SSIS中的SFTP文件传输

tze*_*zee 6 sftp ssis winscp sql-server-data-tools

我已经阅读了很多不同的论坛,但似乎不能让我的工作.我需要使用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
Run Code Online (Sandbox Code Playgroud)

在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

我如何在命令行中测试它,我做错了什么?

Mar*_*ryl 3

你并没有真正向我们解释什么(如果有的话)出了问题。

一般来说,WinSCP 常见问题解答中涵盖了此类问题。我的脚本在手动执行时工作正常,但在由 Windows Scheduler、SSIS 或其他自动化服务运行时失败或挂起。我究竟做错了什么?

另请参阅 WinSCP 文章SSIS/SSDT 的 SFTP 任务

不过,更具体地说,存在三个明确的问题,如下所述。


您已在交互式 Windows 会话中创建了 WinSCP 存储站点。默认情况下,WinSCP 将站点信息存储到 Windows 注册表的 HKCU 配置单元中。您的 SSIS 会话无法访问该配置单元。

理想情况下,您应该创建一个独立的脚本,该脚本不依赖于存储的配置。这特别意味着您的open命令应包含凭据和主机密钥指纹,例如:

open sftp://username:password@TS_NEW.com -hostkey=...
Run Code Online (Sandbox Code Playgroud)

WinSCP GUI 可以为您生成这样的脚本。


另一个问题是您的cd命令实际上应该是lcd,并且路径必须用引号引起来,因为它包含空格。

lcd "C:\Users\zaccheut\Documents\Analytics Project 2018\ThoughtSpot\SSIS File"
Run Code Online (Sandbox Code Playgroud)

同样,WinSCP 参数中的脚本路径必须用引号引起来,因为它包含空格:

/script="C:\Users\zaccheut\Documents\Visual Studio 2012\Projects\Skynet Refreshes\Skynet Refreshes\local2remote.txt"
Run Code Online (Sandbox Code Playgroud)

您还应该向 WinSCP 参数添加/log开关以启用会话日志记录。这将对您的调试有很大帮助。生成的脚本(上面)也表明了这一点。