最新有一个需求,需要在ssis中调用sftp下载文件,由于服务器上只有framework2.0,并且需要用sqlserver代理调用作业,限制了很多。

首先用的是脚本任务,进程调用winscp.com执行,这中间碰见一个问题,不能控制什么时间winscp执行完成,导致作业卡死,第一种尝试方式失败。

接着用脚本任务,调用winscp.dll类进行操作,这中方式用c#代码可以实现,但是用脚本任务时间,添加winscp.dll引用,编译没有问题,执行时间报“未能找到winscp.dll”(怀疑是动态调用dll的原因,暂未解决)第二种尝试失败。

重点来了,最后用VBScript调用winscp的方式,因为这种最后成功了,哈哈,接下来说步骤

winscp官网(https://winscp.net/eng/docs/lang:chs)给的有文档,大家可以去看下,我这英语三级半的水平用翻译都整出来了。

服务器上是framework2.0,官网给的说明支持2.0,但是最新的源码里添加失败,就考虑换老版的dll(https://sourceforge.net/projects/winscp/files/WinSCP/),我用的5.9版本的,

用命令注册(注册时间在dll文件夹中打开命令)

C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe WinSCPnet.dll /codebase /tlb:WinSCPnet32.tlb
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe WinSCPnet.dll /codebase /tlb:WinSCPnet64.tlb

然后在ssis中添加ActiveX脚本任务,选择VBScript语言

Function Main()
' Setup session options
Dim sessionOptions
Set sessionOptions = CreateObject("WinSCP.SessionOptions")
With sessionOptions
.Protocol = Protocol_Sftp
.HostName = "127.0.0.1"
.UserName = "mysftp"
.Password = "password"
.SshHostKeyFingerprint = "xxxx"(这个地方需要用winscp软件先连接sftp服务器,然后在站点右键----generate session URL/Code中可以找到)
End With

Dim session
Set session = CreateObject("WinSCP.Session")

' Connect
session.Open sessionOptions

' Download files
Dim transferOptions
Set transferOptions = CreateObject("WinSCP.TransferOptions")
transferOptions.TransferMode = TransferMode_Binary

Dim transferResult

if session.FileExists("/") then
Set transferResult = session.GetFiles("/*", "d:\import\", False, transferOptions)
end if
' Throw on any error
transferResult.Check

' Print results
Dim transfer
For Each transfer In transferResult.Transfers
Echo "Download of " & transfer.FileName & " succeeded"
Next

' Disconnect, clean up
session.Dispose

End Function

到此通过sftp获取文件成功。

-----------------------------再更新记录一点

SshHostKeyFingerprint=“ssh-ed25519 256 4d:dd:48:af:76:c2:ba:a8:bc:20:f3:28:1d:6a:28:53”;

服务器算法升级时,如果提醒报错,报错信息中会有新的hostKey,在5.9版本中如果用软件生成的代码ssh-ed25519 256 mjXd5ywKQ0jROXgw7mmMqbSOAjTZU4gl0VQDt2DjybY=可能报错,说不符合规则,连接上winscp,在服务器信息/协议信息中可以看到hostkey对应的MD5值,换成MD5值试试。

最新文章

  1. SqlServer基础之(触发器)
  2. google map javascript api v3 例子
  3. DirectX.Capture Namespace
  4. NEC学习 ---- 模块 -简易文字链接列表
  5. 相同vlan之间的相互访问
  6. delphi 读取excel 两种方法
  7. java.lang.UnsupportedClassVersionError: org/sonatype/nexus/bootstrap/jsw/JswLauncher : Unsupported major.minor version 51.0
  8. android AutoCompleteTextView和Spinner选中项加亮
  9. js基础之面向对象
  10. Linux 查看版本详情
  11. Hadoop2.2.0(yarn)编译部署手册
  12. java计算过G文件md5 值计算
  13. Oracle DataGuard数据备份方案详解
  14. android网络图片的下载
  15. 在VisualStudio 2012中通过SmallSharp压缩js及修改web.config
  16. java多线程检测可用IP
  17. 实现基本TCP套接字客户端
  18. Jedis连接池使用
  19. Redis 设置开机启动
  20. 读书学习-Python--描述符(python3)

热门文章

  1. Nginx(二):配置文件
  2. windows jupyter lab中.ipynb转中文PDF
  3. Linux下安装ffmpeg,视频格式转换
  4. k8s之深入解剖Pod(二)
  5. Centos上配置nginx+uwsgi+负载均衡配置
  6. kubernetes环境搭建 -k8s笔记(一)
  7. C# 托管与非托管类型 堆和栈 值类型与引用类型 装箱与拆箱
  8. Redis 设计与实现:Redis 对象
  9. Redis基础篇(三)持久化:AOF日志
  10. 论文阅读LR LIO-SAM