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

Download files from SFTP server using PowerShell

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

将用于下载的 API/library 需要能够监控传输结果、记录传输以及 archive/move 下载的文件。

提前致谢。

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


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

(我是WinSCP的作者)