Windows 標準のシェル言語である Powershell は様々な強力な機能が搭載されています。インターネットからファイルをダウンロードする機能も豊富に装備されています。このページではそれらを分かりやすくまとめています。是非ご活用ください。
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ページ(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ページのリンク先の一覧を取得するサンプルコード
Powershell には wget alias のinvoke-webrequestがありますが、2021年現在で私が調査した限りでは wget の -r オプション (再帰的にサブディレクトリもダウンロード) は使用できませんでした。またWindows 標準の curl.exe (C:\Windows\System32\curl.exe) は再帰的ダウンロードオプションはありませんでした。
そこで cygwin に含まれる wget.exe を利用することにしました。