使用 PowerShell 將檔案上傳到 SFTP

Migel Hewage Nimesha 2023年1月30日 2022年5月16日
  1. 什麼是 SFTP
  2. 使用 PowerShell 將檔案上傳到 SFTP 站點
  3. 使用 WinSCP 通過 PowerShell 將檔案上傳到 SFTP 站點
使用 PowerShell 將檔案上傳到 SFTP

Windows 和 Mac 使用者發現可以通過命令列介面執行的工具非常有限。大多數基於 GUI 的應用程式為所有使用者提供低指令碼和自動化功能。

PowerShell 用於彌合 Windows 使用者和類 Linux 系統使用者之間的差距。PowerShell 為指令碼編寫、自動化需求、CI/CD 系統管理等提供了一個命令列介面。

PowerShell 是 Microsoft 的產品,它為 Windows 和 Mac 使用者提供了滿足其指令碼要求的靈活性。但是,在使用 PowerShell 時,你應該熟悉一些指令碼命令和 PowerShell 獨有的命令。

什麼是 SFTP

SFTP 是使用者常用的一種協議,用於將檔案從一臺計算機/伺服器傳輸到另一臺計算機/伺服器。它是通用 FTP 協議的安全版本,可確保傳送方和接收方之間的端到端檔案加密。

SFTP 代表安全檔案傳輸協議,是計算中最常用的檔案傳輸方法之一。

使用 PowerShell 將檔案上傳到 SFTP 站點

我們的要求是使用 PowerShell 將檔案按計劃上傳到 SFTP 站點。PowerShell 讓使用者可以毫無問題地執行預定指令碼。

這可以通過幾個步驟來解釋。

  1. 將安排一個檔案從資料庫上傳到 SFTP 站點。
  2. 建立身份驗證以訪問該站點。
  3. Windows 任務計劃程式觸發指令碼在特定時間執行。
  4. 任務排程程式會抓取所需的檔案並將其上傳到 FTP 站點。

使用 WinSCP 通過 PowerShell 將檔案上傳到 SFTP 站點

WinSCP 是最流行的 SFTP 客戶端之一,也是 Microsoft Windows 的 FTP 客戶端。此工具可以將檔案從計算機複製到遠端檔案伺服器。

為此要求,我們必須首先下載 WinSCP .NET 程式集。

然後必須使用指令碼提取檔案。然後我們將根據官方的 WinSCP 上傳示例此處建立如下指令碼。

Add-Type -Path "WinSCPnet.dll"

$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
    Protocol = [WinSCP.Protocol]::Sftp
    HostName = "example.com"
    UserName = "user"
    Password = "mypassword"
    SshHostKeyFingerprint = "ssh-rsa 2048 xx...="
}
$session = New-Object WinSCP.Session
try
{
    $session.Open($sessionOptions)
    $session.PutFiles("C:\users\export.txt","/Outbox/").Check()
}
finally
{
    $session.Dispose()
}

重要的是要記住所有這些都必須在 WinSCP GUI 中完成,如下所示。

  1. 登入到 WinSCP
  2. 導航到遠端位置的目標目錄。
  3. 選擇上傳命令
  4. 傳輸選項 > 傳輸設定 > 生成程式碼 > .NET 彙編程式碼 > PowerShell 語言

作為程式碼的輸出,該檔案將被上傳到你指定的位置/站點,並最終清理以處理會話。

Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.