Invoke-WebRequestで-OutFileをつけるとファイルのダウンロードをすることが出来ます。
さらにPassThruオプションをつけるとダウンロードを実行してさらにコンテンツをオブジェクトとして取得することが出います。
PS > Invoke-WebRequest -Uri "https://maywork.net/wp/wp-content/uploads/2023/11/202311051923.jpg" -OutFile H:\hoge\img.jpg -PassThru
StatusCode : 200
StatusDescription : OK
Content : {255, 216, 255, 224…}
RawContent : HTTP/1.1 200 OK
Server: nginx
Date: Wed, 15 Nov 2023 01:56:00 GMT
Connection: keep-alive
Cache-Control: public, max-age=31536000, private
Accept-Ranges: bytes
Vary: Accept
Content-Type: image/j…
Headers : {[Server, System.String[]], [Date, System.String[]], [Connection, System.String[]], [Cache-Control,
System.String[]]…}
RawContentLength : 182058
RelationLink : {}
サンプルではダウンロードする対象が画像ファイルですのでコンテンツを返されても使い道が思いつきませんが、HTMLであればパースしてリンクを取得するようなプログラミングに使えそうです。
昔から、よくwgetのように再帰的にwebサイトをダウンロードするスクリプトを書いていました。インターネットの接続環境が常時接続になる前は、オフラインでもWebサイトが閲覧できるようにしたり、近年ではお気に入りのwebサイトをアーカイブして永年保管する、個人用のWaybackMachne的な使い方をしています。
その時々で目的は変わりますが、スクリプトにすることで目的に合わせて柔軟にカスタマイズすることが利点となります。
今時の用語ではスクレイピングやクローラーに相当するソフトだと思いますが、そのおかげかスクリプトを組むためライブラリが充実しており、今回のPassThruオプションなどは自前でコード書く手間が省けて大変ありがたいです。
そのうちPowerShellで再帰的にWebサイトをダウンロードするスクリプトを組みたいと思います。
コメント