Windows10:PowerShellでインターネットからファイルをダウンロードする

「Windows PowerShell」などでスクリプトを作成していて、インターネット上のファイルを利用したいときがあります。

あらかじめ手動でダウンロードしておくのも手ですが、スクリプト内でダウンロードするようにしておけば、手動でダウンロードする手間も省け、常に最新のファイルを利用できるという利点もあります。

そこで、ここではWindows PowerShellでインターネットからファイルをダウンロードする方法を2パターン紹介します。

動作環境

この記事は、以下の環境で実行した結果を基にしています。他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェア バージョン
Windows10 Professional 64bit 1809
PSVersion 5.1.17763.134

パターン1

ここでは「.Net Framework」の「System.Net.WebClient」クラスを用いて、Firefoxのインストラーをダウンロードしてみます。

# ダウンロードするファイルのURL
$target_url = "https://download.mozilla.org/?product=firefox-latest-ssl&os=win64&lang=ja"
# ローカルの保存先
$file_path = "E:\test\firefox.exe"

# ファイルのダウンロード
$web_client = New-Object System.Net.WebClient
$web_client.DownloadFile($target_url, $file_path)

WebProxyクラスとNetworkCredentialクラスを併用すれば、認証付きプロキシーサーバー経由でも利用可能です。

# ダウンロードするファイルのURL
$target_url = "https://download.mozilla.org/?product=firefox-latest-ssl&os=win64&lang=ja"
# ローカルの保存先
$file_path = "E:\test\firefox.exe"

# プロキシーサーバー設定
$proxy_url = "http://proxy.hoge.co.jp:8080"
$proxy_user = "testuser"
$proxy_pass = "Password"

$proxy_server = New-Object System.Net.WebProxy($proxy_url, $true)
$credential = New-Object System.Net.NetworkCredential($proxy_user, $proxy_pass)
$proxy_server.Credentials = $credential

# ファイルのダウンロード
$web_client = New-Object System.Net.WebClient
$web_client.Proxy = $proxy_server
$web_client.DownloadFile($target_url, $file_path)

パターン2

ここでは「Invoke-WebRequest」コマンドレットを用いて、Firefoxのインストラーをダウンロードしてみます。

# ダウンロードするファイルのURL
$target_url = "https://download.mozilla.org/?product=firefox-latest-ssl&os=win64&lang=ja"
# ローカルの保存先
$file_path = "E:\test\firefox.exe"

# ファイルのダウンロード
Invoke-WebRequest -Uri $target_url -OutFile $file_path

「Invoke-WebRequest」コマンドレットのプロキシー関連オプションを用いれば、認証付きプロキシーサーバー経由でも利用可能です。

# ダウンロードするファイルのURL
$target_url = "https://download.mozilla.org/?product=firefox-latest-ssl&os=win64&lang=ja"
# ローカルの保存先
$file_path = "E:\test\firefox.exe"

# プロキシーサーバー設定
$proxy_url = "http://hogehoge.com:8080"
$proxy_user = "testuser"
$proxy_pass = "Password"
$s = ConvertTo-SecureString $proxy_pass -AsPlainText -Force
$proxy_cred = New-Object System.Management.Automation.PSCredential $proxy_user,$s

# ファイルのダウンロード
Invoke-WebRequest -Uri $target_url -OutFile $file_path -Proxy $proxy_url -ProxyCredential $proxy_cred
Memo

ここでは、単純な例としてパスワードを直書きしていますが、セキュリティを考えると、あらかじめパスワードを暗号化文字列にした上で別のファイルに保存しておいて、そのファイルを参照するように書き換えたほうが良いと思います。

あとがき

インターネットに公開されているツールなどをスクリプト内で実行したい場合に、事前にダウンロードしておかなくても、スクリプト内でダウンロードできて便利です。

スポンサーリンク
おすすめコンテンツ
トップへ戻る