HOWTO · PowerShell

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"

–>

その後、System.URI オブジェクトを作成し、変数に割り当てます。以下に示すように。

$URI = New-Object System.Uri($FTP)

最後のステップは、UploadFile メソッドを使用することです。すると、ファイルが FTP サーバーにアップロードされます。

$WebClient.UploadFile($URI, $File)

完全なスクリプトは以下に示されています。

$WebClient = New-Object System.Net.WebClient
$File = "C:\New\car.png"
$FTP = "ftp://ftp_user:ftp_password@ftp_host/car.png"
$URI = New-Object System.Uri($FTP)
$WebClient.UploadFile($URI, $File)

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

この方法では、FTP サーバーにファイルをアップロードするための FtpWebRequest オブジェクトのインスタンスを作成します。

まず最初に、FTP とファイルの詳細を定義します。

$username = "ftp_user"
$password = "ftp_password"
$local_file = "C:\New\test.txt"
$remote_file = "ftp://ftp_host/test.txt"

次に、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/"

–>

その後、foreach ループを使用して $Dir 内の各項目に対してコマンドを実行します。次のコードは、$Dir 内のすべての .txt ファイルを FTP サーバー$FTP にアップロードします。

foreach ($item in (Get-ChildItem $Dir "*.txt")) {
    "Uploading $item..."
    $URI = New-Object System.Uri($FTP + $item.Name)
    $WebClient.UploadFile($URI, $item.FullName)
}

この記事が PowerShell で FTP サーバーを使ってファイルをアップロードするのに役立ったことを願っています。