
ここでは、WindowsのPowerShellを使ってコマンド操作でインターネットからファイルをダウンロードする方法を2つ紹介します。
目次
System.Net.WebClientクラスを用いた方法
一つ目の方法は、.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)Invoke-WebRequestコマンドレットを用いた方法
二つ目の方法は、Invoke-WebRequestコマンドレットを用いた方法で、以下の例では、Firefoxのインストラーをダウンロードしています。
前述の.Net FrameworkのSystem.Net.WebClientクラスを用いた方法より、Invoke-WebRequestコマンドレットを用いた方法が推奨されています。
# ダウンロードするファイルの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プロキシー関連オプションを用いれば、認証付きプロキシーサーバー経由でも利用可能です。
# ダウンロードするファイルの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ここでは、単純な例としてパスワードを直書きしていますが、セキュリティを考えると、あらかじめパスワードを暗号化文字列にした上で別のファイルに保存しておいて、そのファイルを参照するように書き換えたほうが良いでしょう。
あとがき
インターネットに公開されているツールなどをスクリプト内で実行したい場合に、事前にダウンロードしておかなくても、スクリプト内でダウンロードできて便利です。