PowerShellのInvoke-WebRequestでPassThruオプションを試す。

powershell7 コンピュータ
powershell7

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サイトをダウンロードするスクリプトを組みたいと思います。

コメント