zoukankan      html  css  js  c++  java
  • VBScript调用winscp,实现sftp操作

    最新有一个需求,需要在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:WindowsMicrosoft.NETFrameworkv2.0.50727RegAsm.exe WinSCPnet.dll /codebase /tlb:WinSCPnet32.tlb
    C:WindowsMicrosoft.NETFramework64v2.0.50727RegAsm.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值试试。

  • 相关阅读:
    Oracle 列转行函数 Listagg()
    JS正则表达式
    云经验
    业务架构、应用架构、数据架构和技术架构
    Sublime Text3+Golang搭建开发环境
    成功安装vscode中go的相关插件
    Visual Studio Code配置GoLang开发环境
    团队架构实践
    架构
    条件引用
  • 原文地址:https://www.cnblogs.com/tb1152/p/12425101.html
Copyright © 2011-2022 走看看