代码之家  ›  专栏  ›  技术社区  ›  Ratnesh Sharma

使用PowerShell从SFTP服务器下载文件

  •  8
  • Ratnesh Sharma  · 技术社区  · 7 年前

    我需要使用PowerShell脚本将文件从SFTP服务器下载到本地机器。

    将用于下载的API/library需要能够监控传输结果、记录传输,以及归档/移动下载的文件。

    提前谢谢。

    1 回复  |  直到 6 年前
        1
  •  32
  •   Francesco Mantovani    3 年前

    PowerShell或中不支持SFTP。NET框架。因此,您必须使用外部SFTP库。


    一种可能性(你在问题中标记了自己)是 WinSCP .NET assembly using WinSCP from PowerShell .

    甚至还有一个 code example in PowerShell for SFTP download :

    try
    {
        # Load WinSCP .NET assembly
        Add-Type -Path "WinSCPnet.dll"
     
        # Setup session options
        $sessionOptions = New-Object WinSCP.SessionOptions -Property @{
            Protocol = [WinSCP.Protocol]::Sftp
            HostName = "example.com"
            UserName = "user"
            Password = "mypassword"
            SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx...="
        }
     
        $session = New-Object WinSCP.Session
     
        try
        {
            # Connect
            $session.Open($sessionOptions)
     
            # Download files
            $transferOptions = New-Object WinSCP.TransferOptions
            $transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
     
            $remotePath = "/home/user/*";
            $localPath = "d:\download\*";
            $transferResult =
                $session.GetFiles($remotePath, $localPath, $False, $transferOptions)
     
            # Throw on any error
            $transferResult.Check()
     
            # Print results
            foreach ($transfer in $transferResult.Transfers)
            {
                Write-Host "Download of $($transfer.FileName) succeeded"
            }
        }
        finally
        {
            # Disconnect, clean up
            $session.Dispose()
        }
     
        exit 0
    }
    catch [Exception]
    {
        Write-Host "Error: $($_.Exception.Message)"
        exit 1
    }
    

    WinSCP GUI甚至可以 generate a PowerShell SFTP download code ,如上图所示,对于您的特定会话设置和传输选项:

    • 使用WinSCP GUI登录服务器;
    • 在远程文件面板中选择要下载的文件;
    • 调用 下载

    enter image description here

    (我是WinSCP的作者)