Powershell でインターネットからファイルをダウンロードするサンプル


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

Windows 標準のシェル言語である Powershell は様々な強力な機能が搭載されています。インターネットからファイルをダウンロードする機能も豊富に装備されています。このページではそれらを分かりやすくまとめています。是非ご活用ください。


URL一覧を元に複数ファイルを一括ダウンロードする

WebClient.DownloadFile メソッドによりインターネットからファイルをダウンロードすることは可能です。

次の例はとてもシンプルなサンプルです。URI (http://example.com/test01.html)を指定してローカルにファイルをダウンロードしています。

インターネットからファイルをダウンロードするサンプルコード:


$WebClient = New-Object System.Net.WebClient
$WebClient.DownloadFile("http://example.com/test01.html", "c:\temp\test01.html" )

参考:WebClient.DownloadFile メソッド (Microsoft 公式サイト)

テキストファイルにURI 一覧を記載して一括ダウンロードするサンプルは次のページを参考にしてください。

インターネットから一括して複数ファイルをダウンロードするサンプル


Webページを解析してリンク一覧を抽出してダウンロードする

Webページ(htmlファイル)の中身を解析してリンク一覧を抽出し、そのリンクをダウンロードすることも可能です。
Invoke-WebRequest コマンドレットで Webページ (BasicHtmlWebResponseObject) を取得し、そのWebページ内のリンクを BasicHtmlWebResponseObject の Links プロパティで取得します。

インターネット上のWebページを解析してURL一覧を取得する:

$WebPage = Invoke-WebRequest -Uri "http://tooljp.com/testlinks.html" -UseBasicParsing
$links = $WebPage.Links
$links | Select-Object -ExpandProperty href

(実行結果)

/test01.html
/test02.html
/test03.html

指定したWebページを解析するサンプル、および解析して一覧をダウンロードするサンプルは次を参考にしてください。

指定したWebページのリンク先の一覧を取得するサンプルコード


インターネット上のWebサイトのファイルを一括ダウンロードする

Powershell には wget alias のinvoke-webrequestがありますが、2021年現在で私が調査した限りでは wget の -r オプション (再帰的にサブディレクトリもダウンロード) は使用できませんでした。またWindows 標準の curl.exe (C:\Windows\System32\curl.exe) は再帰的ダウンロードオプションはありませんでした。
そこで cygwin に含まれる wget.exe を利用することにしました。

Webサイトを一括ダウンロードするサンプル