PowerShell で FTP を使用してファイルをアップロードする方法

  1. PowerShell で FTP を使用してファイルをアップロードするための System.Net.WebClient オブジェクトを使用する
  2. PowerShell で FTP を使用してファイルをアップロードするための FtpWebRequest オブジェクトを使用する
  3. PowerShell で FTP を使用して複数のファイルをアップロードする
PowerShell で FTP を使用してファイルをアップロードする方法

FTP(ファイル転送プロトコル)は、コンピュータネットワーク上のクライアントとサーバー間でファイルを転送するために使用される標準ネットワークプロトコルです。FTP サーバーは、インターネットを介したファイル転送を容易にするための一般的なソリューションです。

私たちは FTP サーバーにファイルをアップロードし、FTP サーバーからファイルをダウンロードできます。PowerShell は、FTP のアップロードとダウンロードのタスクを自動化できるスクリプトツールです。

このチュートリアルでは、PowerShell を使用して FTP サーバーにファイルをアップロードする方法を学びます。

PowerShell で FTP を使用してファイルをアップロードするための System.Net.WebClient オブジェクトを使用する

System.Net.WebClient オブジェクトを使用して FTP サーバーにファイルをアップロードできます。これは、URI で識別される任意のローカル、イントラネット、またはインターネットリソースからデータを送信または受信します。

まず、System.Net.WebClient オブジェクトのインスタンスを作成し、変数 $WebClient に割り当てる必要があります。New-Object コマンドレットは、.NET Framework または COM オブジェクトのインスタンスを作成します。

$WebClient = New-Object System.Net.WebClient

次に、ファイルと FTP URI を指定します。サーバーのための有効なユーザー名とパスワードを使用してください。したがって、$FTP の値をあなたの FTP の詳細に置き換えてください。

$File = "C:\New\car.png"
$FTP = "ftp://ftp_user:ftp_password@ftp_host/car.png"

次に、FtpWebRequest オブジェクトを作成し、以下に示すように構成します。Credentials プロパティは、FTP サーバーに接続するための資格情報を指定するために使用されます。

UseBinary プロパティは、ファイル転送のデータタイプを指定するためのブール値を設定します。True は、転送するデータがバイナリであることを示し、false は、転送するデータがテキストであることを示します。

この方法は、変更または変換せずにファイルを転送するためにバイナリ転送モードを使用します。その結果、ソースコンピュータ上の同じファイルがサーバーにアップロードされます。

$FTPRequest = [System.Net.FtpWebRequest]::Create("$remote_file")
$FTPRequest = [System.Net.FtpWebRequest]$FTPRequest
$FTPRequest.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile
$FTPRequest.Credentials = New-Object System.Net.NetworkCredential($username, $password)
$FTPRequest.UseBinary = $true
$FTPRequest.UsePassive = $true

# Read the file for upload
$FileContent = gc -en byte $local_file
$FTPRequest.ContentLength = $FileContent.Length

# Get stream request by bytes
$run = $FTPRequest.GetRequestStream()
$run.Write($FileContent, 0, $FileContent.Length)

# Cleanup
$run.Close()
$run.Dispose()

ファイルをサーバーにアップロードするために FtpWebRequest オブジェクトを使用する場合、GetRequestStream メソッドを呼び出すことによって取得したリクエストストリームにファイル内容を書き込む必要があります。

リクエストを送信する前に、ストリームに書き込み、閉じる必要があります。

PowerShell で FTP を使用して複数のファイルをアップロードする

時には、FTP サーバーに複数のファイルをアップロードする必要があるかもしれません。一度に 1つずつファイルをアップロードするのは、非常に時間がかかります。

そのため、1 回で FTP サーバーに複数のファイルをアップロードするためにこの PowerShell スクリプトを作成しました。

まず、System.Net.WebClient オブジェクトを作成し、$WebClient 変数に割り当てます。

$WebClient = New-Object System.Net.WebClient

アップロードしたいすべてのファイルが存在するディレクトリを指定してください。

$Dir = "C:\New"

次に、あなたの FTP サーバーの URI を指定します。

$FTP = "ftp://ftp_user:ftp_password@ftp_host/docs/"