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

Rat*_*rma 3 .net powershell sftp winscp powershell-2.0

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

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

提前致谢.

Mar*_*ryl 9

PowerShell或.NET框架中没有SFTP支持.所以你必须使用外部SFTP库.


一种可能性(您在自己的问题中标记了自己)是WinSCP .NET程序集.有一篇关于使用PowerShell的WinSCP的文章.

在PowerShell中甚至还有SFTP下载代码示例:

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

        $transferResult =
            $session.GetFiles("/home/user/*", "d:\download\*", $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
}
Run Code Online (Sandbox Code Playgroud)

WinSCP GUI甚至可以为您的特定会话设置和传输选项生成PowerShell SFTP下载代码(如上所示):

  • 使用WinSCP GUI登录您的服务器;
  • 在远程文件面板中选择要下载的文件;
  • 导航到本地文件面板中的目标目录;
  • 调用Download命令;
  • 在" 传输选项"对话框中,转到" 传输设置">"生成代码" ;
  • 在"生成传输代码"对话框中,选择" .NET汇编代码"选项卡 ; 选择PowerShell语言.

在此输入图像描述

(我是WinSCP的作者)