【问题标题】:Download files from SFTP server using PowerShell使用 PowerShell 从 SFTP 服务器下载文件
【发布时间】:2018-03-21 11:53:07
【问题描述】:

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

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

提前致谢。

【问题讨论】:

    标签: .net powershell powershell-2.0 sftp winscp


    【解决方案1】:

    PowerShell 或 .NET 框架不支持 SFTP。所以你必须使用外部 SFTP 库。


    一种可能性(您已在问题中标记了自己)是WinSCP .NET assemblyusing 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 登录您的服务器;
    • 在远程文件面板中选择要下载的文件;
    • 在本地文件面板中导航到目标目录;
    • 调用下载命令;

    (我是 WinSCP 的作者)

    【讨论】: