PowerShellでインターネット上のファイルを利用したい場合、あらかじめ手動でダウンロードしておくのも手ですが、スクリプト内で直接ダウンロードすることもできます。
そこでここでは、PowerShellでインターネットからファイルをダウンロードする方法を2つ紹介します。
目次
ダウンロード方法 その1
一つ目の方法は「.Net Framework」の「System.Net.WebClient」クラスを用いた方法で、以下の例では、Firefoxのインストラーをダウンロードしています。
# ダウンロードするファイルのURL
PS> $target_url = "https://download.mozilla.org/?product=firefox-latest-ssl&os=win64&lang=ja"
# ローカルの保存先
PS> $file_path = "E:\test\firefox.exe"
# ファイルのダウンロード
PS> $web_client = New-Object System.Net.WebClient
PS> $web_client.DownloadFile($target_url, $file_path)
WebProxyクラスとNetworkCredentialクラスを併用すれば、認証付きプロキシーサーバー経由でも利用可能です。
# ダウンロードするファイルのURL
PS> $target_url = "https://download.mozilla.org/?product=firefox-latest-ssl&os=win64&lang=ja"
# ローカルの保存先
PS> $file_path = "E:\test\firefox.exe"
# プロキシサーバー設定
PS> $proxy_url = "http://proxy.hoge.co.jp:8080"
PS> $proxy_user = "testuser"
PS> $proxy_pass = "Password"
PS> $proxy_server = New-Object System.Net.WebProxy($proxy_url, $true)
PS> $credential = New-Object System.Net.NetworkCredential($proxy_user, $proxy_pass)
PS> $proxy_server.Credentials = $credential
# ファイルのダウンロード
PS> $web_client = New-Object System.Net.WebClient
PS> $web_client.Proxy = $proxy_server
PS> $web_client.DownloadFile($target_url, $file_path)
ダウンロード方法 その2
二つ目の方法は「Invoke-WebRequest」コマンドレットを用いた方法で、以下の例では、Firefoxのインストラーをダウンロードしています。
# ダウンロードするファイルのURL
PS> $target_url = "https://download.mozilla.org/?product=firefox-latest-ssl&os=win64&lang=ja"
# ローカルの保存先
PS> $file_path = "E:\test\firefox.exe"
# ファイルのダウンロード
PS> Invoke-WebRequest -Uri $target_url -OutFile $file_path
「Invoke-WebRequest」コマンドレットのプロキシー関連オプションを用いれば、認証付きプロキシーサーバー経由でも利用可能です。
# ダウンロードするファイルのURL
PS> $target_url = "https://download.mozilla.org/?product=firefox-latest-ssl&os=win64&lang=ja"
# ローカルの保存先
PS> $file_path = "E:\test\firefox.exe"
# プロキシサーバー設定
PS> $proxy_url = "http://hogehoge.com:8080"
PS> $proxy_user = "testuser"
PS> $proxy_pass = "Password"
PS> $s = ConvertTo-SecureString $proxy_pass -AsPlainText -Force
PS> $proxy_cred = New-Object System.Management.Automation.PSCredential $proxy_user,$s
# ファイルのダウンロード
PS> Invoke-WebRequest -Uri $target_url -OutFile $file_path -Proxy $proxy_url -ProxyCredential $proxy_cred
ここでは、単純な例としてパスワードを直書きしていますが、セキュリティを考えると、あらかじめパスワードを暗号化文字列にした上で別のファイルに保存しておいて、そのファイルを参照するように書き換えたほうが良いと思います。
あとがき
インターネットに公開されているツールなどをスクリプト内で実行したい場合に、事前にダウンロードしておかなくても、スクリプト内でダウンロードできて便利です。