在不使用WinSCP的情况下,SSIS包中是否可以使用SFTP

时间:2016-09-22 13:28:26

标签: ssis sftp

我有一个使用FTP的SSIS包。现在我需要改变它来做SFTP,有可能我可以使用FTP任务并执行SFTP,或者在不使用WinSCP的情况下执行SFTP。

1 个答案:

答案 0 :(得分:1)

没有开箱即用。您还可以使用其他任务在脚本中使用任何SFTP库,或使用SFTP powershell命令。付费组件通常更好,因为您发现的大多数SFTP任务看起来有点过时且用户界面有点笨拙。

对于初学者,您可以查看SSIS SFTP Task Component。这取决于SharpSSH,这是一个自2013年以来未经更新的图书馆

另一方面,Posh-SSH和基础库SSH.NET仅在几周前发布。

在我的情况下,我最终使用带有PowerShell脚本的Posh-SSH,因为它允许我比较远程和本地文件的目录列表,使用标准PowerShell操作检测文件并下载仅使用SFTP的较新/更改的文件。

例如,以下Powershell函数将检索两个列表并使用Compare-Object命令对它们进行比较:

function get-diffs( $session,$remotePath,$localPath)
{
    $remoteFiles=Get-SFTPChildItem -SFTPSession $session -Path $remotePath 
    $localFiles=Get-ChildItem $localPath

    Compare-Object -ReferenceObject $localFiles -DifferenceObject $remoteFiles -Property "Name" -PassThru
}

结果包含SideIndicator属性,该属性显示哪些文件必须从一侧移动到另一侧。例如:

$newFiles=$diffs|where SideIndicator -eq '=>'
...
foreach ($f in $newFiles)
{
    Get-SFTPFile -SFTPSession $session -RemoteFile $f.FullName -LocalPath $dropFolder -Overwrite
}

使用SSIS做同样的事情将是 lot 更难。