PowerShellでインターネット上のファイルを利用したい場合、あらかじめ手動でダウンロードしておくのも手ですが、スクリプト内で直接ダウンロードすることもできます。
そこでここでは、PowerShellでインターネットからファイルをダウンロードする方法を2パターン紹介します。
目次
動作環境
この記事は、以下の環境で実行した結果を基にしています。他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。
ソフトウェア | バージョン |
---|---|
Windows 10 Pro 64bit | 1809 |
PSVersion | 5.1.17763.134 |
パターン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
Memo
ここでは、単純な例としてパスワードを直書きしていますが、セキュリティを考えると、あらかじめパスワードを暗号化文字列にした上で別のファイルに保存しておいて、そのファイルを参照するように書き換えたほうが良いと思います。
あとがき
インターネットに公開されているツールなどをスクリプト内で実行したい場合に、事前にダウンロードしておかなくても、スクリプト内でダウンロードできて便利です。