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

10
我需要使用PowerShell脚本从SFTP服务器下载文件到本地机器。
需要使用的API/库需要能够监视传输结果、记录传输过程,并对已下载的文件进行存档/移动。
提前感谢您。
1个回答

36

在PowerShell和.NET框架中没有SFTP支持,因此您需要使用外部SFTP库。


一种可能性(您在问题中已标记)是WinSCP .NET程序集。有一篇关于如何从PowerShell中使用WinSCP的文章

甚至有一个用于SFTP下载的PowerShell代码示例

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图形用户界面甚至可以像上面那样生成适用于特定会话设置和传输选项的PowerShell SFTP下载代码

  • 使用WinSCP GUI登录到您的服务器;
  • 在远程文件面板中选择要下载的文件;
  • 在本地文件面板中导航到目标目录;
  • 调用下载命令;

enter image description here

(我是WinSCP的作者)


另一种方法是调用OpenSSH的sftp(常用于Linux系统)。最近的Windows 10和Windows 11版本中都内置了OpenSSH。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接