Dot-Net

使用 PowerShell 從 SFTP 伺服器下載文件

  • June 2, 2022

我需要使用 PowerShell 腳本將文件從 SFTP 伺服器下載到本地電腦。

將用於下載的 API/庫需要能夠監控傳輸結果、記錄傳輸以及存檔/移動下載的文件。

提前致謝。

PowerShell 或 .NET 框架中不支持 SFTP。所以你必須使用外部 SFTP 庫。


一種可能性(您在問題中標記了自己)是WinSCP .NET assembly。有一篇關於使用 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

       $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 甚至可以為您的特定會話設置和傳輸選項生成 PowerShell SFTP 下載程式碼,如上面的程式碼:

  • 使用 WinSCP GUI 登錄到您的伺服器;

  • 在遠端文件面板中選擇要下載的文件;

  • 在本地文件面板中導航到目標目錄;

  • 呼叫下載命令;

  • 在“傳輸選項”對話框中,轉到“傳輸設置”>“生成程式碼”

  • 在 Generate transfer code 對話框中,選擇.NET assembly code 選項卡;選擇PowerShell語言。

在此處輸入圖像描述

(我是WinSCP的作者)

引用自:https://stackoverflow.com/questions/46660545