需要将 SSIS 变量传递给执行进程任务,以便为 Winscp 创建动态命令行参数
Need to pass SSIS variable to the Execute Process task to make Dynamic command line argument for Winscp
我在 SFTP 位置有一个文件夹 'DATA'
,我需要从那里将文件集下载到某个常用位置,然后将相应的文件复制到不同的文件夹位置。
文件名是:
Test1.csv
Test2.csv
Test3.csv
Test4.csv
Test5.csv
我希望文件首先下载到以下位置:
G:\USER_DATA\USER_USER_SYNC\Download
由于这些文件与不同的模式相关,并且必须由每个不同的 ssis 包单独处理以进行进一步的转换和加载。
由于某些原因,我们必须先将其保存在某个公共位置,然后再移动或复制。
这是我的命令行参数。
/log=G:\USER_DATA\USER_USER_SYNC\SFTP_LOG\user_sync_winscp.log /command "open sftp://username:password@stransfer.host.com/" -hostkey=""ssh-rsa 2048 9b:63:5e:c4:26:bb:35:0d:49:e6:74:5e:5a:48:c0:8a""" "get /DATA/Test1.csv G:\USER_DATA\USER_USER_SYNC\Download\" "exit"
使用上面的方法,我可以一次下载一个文件。
因为,我需要先将它放在某个常用文件夹位置。因此我打算添加另一个执行进程任务来复制文件。
/C copy /b G:\USER_DATA\USER_USER_SYNC\Download\Test1.csv G:\USER_DATA\USER_USER_SYNC\Testing1
/C copy /b G:\USER_DATA\USER_USER_SYNC\Download\Test1.csv G:\USER_DATA\USER_USER_SYNC\Testing2
等等...
我正在寻找某种方式,使用它我们可以将所有可用文件下载到一些常见的文件夹位置,然后移动或复制到不同的文件夹位置。
我改变了设计并采用了新的方法。感谢 Martin 修复了 sftp 相关的问题和持续的支持。
新的 SSIS 包具有以下任务:
步骤 1。它将在 sftp 服务器上查找最新更新的文件,并将给定文件 Test1.csv
和 Test2.csv
下载到位置 G:\USER_DATA\USER_USER_SYNC\Download\
这是我的命令行参数:
/log=G:\USER_DATA\USER_USER_SYNC\SFTP_LOG\user_sync_winscp.log /command "open sftp://bisftp:*UFVy2u6jnJ]#hU0Zer5AjvDU4#K3m@stransfer.host.com/ -hostkey=""ssh-rsa 2048 9b:63:5e:c4:26:bb:35:0d:49:e6:74:5e:5a:48:c0:8a""" "cd /DATA" "get -filemask=">=today" Test1.csv Test2.csv G:\USER_DATA\USER_USER_SYNC\Download\" "exit"
Step-2. 由于我的要求是进一步将每个文件复制到不同的文件夹位置,以便各个进程可以选择相应的文件并开始转换并将其加载到sql服务器。
此步骤将执行 Window cmd 进程并将 Test1.csv
复制到新位置
G:\USER_DATA\USER_USER_SYNC\Testing1
命令行参数为:
/C copy /b G:\USER_DATA\USER_USER_SYNC\Download\Test1.csv G:\USER_DATA\USER_USER_SYNC\Testing1
同样,我有另一个执行进程任务将 Test2.csv
复制到新位置,如
G:\USER_DATA\USER_USER_SYNC\Testing2
命令行参数为:
/C copy /b G:\USER_DATA\USER_USER_SYNC\Download\Test2.csv G:\USER_DATA\USER_USER_SYNC\Testing2
给定的解决方案工作正常,但仍有几件事需要处理。
因为我只使用 -filemask=">=today".
下载最新文件,如果执行进程任务能够在 sftp 服务器上找到最新文件,一切都运行良好。如果它不存在,那么下一个后续执行过程任务将失败并显示以下错误消息。
返回的进程退出代码为“1”,而预期为“0”
据我了解,它失败了,因为它没有任何可复制或移动的内容。
有什么方法可以捕获第一次执行流程任务返回的退出代码,并将其存储到某个变量中,以便我们可以使用表达式来决定是否开始下一个任务。
其次,如您所见,我正在使用两个执行进程任务将文件从一个位置复制到另一个位置。我们可以做些什么来将这两个命令组合成一个执行进程任务吗?
非常欢迎任何建议,而且我认为这个问题需要作为一个单独的问题来解决。
我在 SFTP 位置有一个文件夹 'DATA'
,我需要从那里将文件集下载到某个常用位置,然后将相应的文件复制到不同的文件夹位置。
文件名是:
Test1.csv
Test2.csv
Test3.csv
Test4.csv
Test5.csv
我希望文件首先下载到以下位置:
G:\USER_DATA\USER_USER_SYNC\Download
由于这些文件与不同的模式相关,并且必须由每个不同的 ssis 包单独处理以进行进一步的转换和加载。 由于某些原因,我们必须先将其保存在某个公共位置,然后再移动或复制。 这是我的命令行参数。
/log=G:\USER_DATA\USER_USER_SYNC\SFTP_LOG\user_sync_winscp.log /command "open sftp://username:password@stransfer.host.com/" -hostkey=""ssh-rsa 2048 9b:63:5e:c4:26:bb:35:0d:49:e6:74:5e:5a:48:c0:8a""" "get /DATA/Test1.csv G:\USER_DATA\USER_USER_SYNC\Download\" "exit"
使用上面的方法,我可以一次下载一个文件。
因为,我需要先将它放在某个常用文件夹位置。因此我打算添加另一个执行进程任务来复制文件。
/C copy /b G:\USER_DATA\USER_USER_SYNC\Download\Test1.csv G:\USER_DATA\USER_USER_SYNC\Testing1
/C copy /b G:\USER_DATA\USER_USER_SYNC\Download\Test1.csv G:\USER_DATA\USER_USER_SYNC\Testing2
等等...
我正在寻找某种方式,使用它我们可以将所有可用文件下载到一些常见的文件夹位置,然后移动或复制到不同的文件夹位置。
我改变了设计并采用了新的方法。感谢 Martin 修复了 sftp 相关的问题和持续的支持。
步骤 1。它将在 sftp 服务器上查找最新更新的文件,并将给定文件 Test1.csv
和 Test2.csv
下载到位置 G:\USER_DATA\USER_USER_SYNC\Download\
这是我的命令行参数:
/log=G:\USER_DATA\USER_USER_SYNC\SFTP_LOG\user_sync_winscp.log /command "open sftp://bisftp:*UFVy2u6jnJ]#hU0Zer5AjvDU4#K3m@stransfer.host.com/ -hostkey=""ssh-rsa 2048 9b:63:5e:c4:26:bb:35:0d:49:e6:74:5e:5a:48:c0:8a""" "cd /DATA" "get -filemask=">=today" Test1.csv Test2.csv G:\USER_DATA\USER_USER_SYNC\Download\" "exit"
Step-2. 由于我的要求是进一步将每个文件复制到不同的文件夹位置,以便各个进程可以选择相应的文件并开始转换并将其加载到sql服务器。
此步骤将执行 Window cmd 进程并将 Test1.csv
复制到新位置
G:\USER_DATA\USER_USER_SYNC\Testing1
命令行参数为:
/C copy /b G:\USER_DATA\USER_USER_SYNC\Download\Test1.csv G:\USER_DATA\USER_USER_SYNC\Testing1
同样,我有另一个执行进程任务将 Test2.csv
复制到新位置,如
G:\USER_DATA\USER_USER_SYNC\Testing2
命令行参数为:
/C copy /b G:\USER_DATA\USER_USER_SYNC\Download\Test2.csv G:\USER_DATA\USER_USER_SYNC\Testing2
给定的解决方案工作正常,但仍有几件事需要处理。
因为我只使用 -filemask=">=today".
下载最新文件,如果执行进程任务能够在 sftp 服务器上找到最新文件,一切都运行良好。如果它不存在,那么下一个后续执行过程任务将失败并显示以下错误消息。
返回的进程退出代码为“1”,而预期为“0”
据我了解,它失败了,因为它没有任何可复制或移动的内容。 有什么方法可以捕获第一次执行流程任务返回的退出代码,并将其存储到某个变量中,以便我们可以使用表达式来决定是否开始下一个任务。
其次,如您所见,我正在使用两个执行进程任务将文件从一个位置复制到另一个位置。我们可以做些什么来将这两个命令组合成一个执行进程任务吗?
非常欢迎任何建议,而且我认为这个问题需要作为一个单独的问题来解决。