PowerShellを使ってファイルをインターネットからダウンロードする方法
本エントリーの目次
インターネットからのファイルのダウンロードを自動化したい!
日々の業務や、PCのメンテナンス・管理上の都合により、インターネットからファイルのダウンロードを行うことがあります。
このとき、複数のファイルをダウンロードする作業を繰り返し行うケースでは、手動で何度も同様の操作をするのが面倒です。
また何度も同じ操作をしているうちに、操作ミスをしてしまうことも考えられるでしょう。
そこで、インターネットからのファイルのダウンロードを、コマンド操作などにより自動化したい!
と感じている方も、いらっしゃるんじゃないでしょうか。
インターネット上で公開されているファイルを、コマンド操作でダウンロードする方法は、複数存在します。
今回はその中から、PowerShellを使ってインターネット上のファイルをダウンロードする方法を3つご紹介しますので、PowerShellを使った作業の自動化にお役立てください!
WebClientを使ってファイルをインターネットからダウンロードする方法
WebClientを使う方法では、以下のようなコマンドを実行することでファイルをダウンロード可能です。
1 | (New-Object System.Net.WebClient).DownloadFile("ダウンロードするファイルのURL","保存先ファイルパス") |
たとえば、ダウンロードしたいファイルのURLが『https://www.haruru29.net/blog/wp-content/uploads/2018/12/corsair-ml120-pro-led.jpg』。
そしてダウンロードしたファイルの保存先として、『C:\test\corsair-ml120-pro-led.jpg』というパスを指定する場合は、以下のようなコマンドを実行します。
1 | (New-Object System.Net.WebClient).DownloadFile("https://www.haruru29.net/blog/wp-content/uploads/2018/12/corsair-ml120-pro-led.jpg","C:\test\corsair-ml120-pro-led.jpg") |
WebClientはPowerShell2.0から利用可能であり、以前のWindows OSでも利用可能な方法と言えます。
Invoke-WebRequestを使ってファイルをインターネットからダウンロードする方法
PowerShell3.0から利用可能となっている『Invoke-WebRequest』コマンドレットでも、ファイルをインターネット上からダウンロード可能です。
こちらもWebClientと同じように、ダウンロードするファイルのURLと保存先ファイルパスを、以下のような構文で指定します。
1 | Invoke-WebRequest "ダウンロードするファイルのURL" -OutFile "保存先ファイルパス" |
したがって、ダウンロードしたいファイルのURLが『https://www.haruru29.net/blog/wp-content/uploads/2018/12/corsair-ml120-pro-led.jpg』。
そしてダウンロードしたファイルの保存先として、『C:\test\corsair-ml120-pro-led.jpg』というパスを指定する場合は、以下のようなコマンドを実行してください。
1 | Invoke-WebRequest "https://www.haruru29.net/blog/wp-content/uploads/2018/12/corsair-ml120-pro-led.jpg" -OutFile "C:\test\corsair-ml120-pro-led.jpg" |
『wget』コマンドも利用可能です!
Linux環境では、インターネット上のファイルをダウンロードする際、『Wget』(またはwget)コマンドを使用することが多いです。
実はこの『wget』コマンドは、PowerShellで実行可能であり、Windows環境でもこのコマンドを使ってファイルをダウンロードできます。
と言いますのも『wget』は、『Invoke-WebRequest』コマンドレットのAlias(別名)としてあらかじめ設定されています。
そのため『wget』コマンドを実行すると、内部的には『Invoke-WebRequest』コマンドレットが実行され、ファイルがダウンロードされる、というわけです。
『Invoke-WebRequest』コマンドレットのAliasであるため、以下のように『Invoke-WebRequest』の部分を『wget』に置き換えた構文で使用します。
1 | wget "ダウンロードするファイルのURL" -OutFile "保存先ファイルパス" |
また『wget』の他に『iwr』も『Invoke-WebRequest』コマンドレットのAliasとして設定されているため、『wget』の代わりに『iwr』を使用しても構いません。
curl.exeを使ってファイルをインターネットからダウンロードする方法
Linux環境でインターネット上のファイルをダウンロードする際、『wget』コマンドと並んでよく使用されるのが、『cURL』(またはcurl)コマンドです。
そしてWindows 10 1803からは、『curl』コマンドがWindowsに標準搭載されているため、このコマンドを使ってインターネット上のファイルをダウンロードすることも可能です。
『curl』コマンドも、WebClientやInvoke-WebRequestと同じように、ダウンロードするファイルのURLと保存先ファイルパスを、以下のような構文で指定してください。
1 | curl.exe -Lo "保存先ファイルパス" "ダウンロードするファイルのURL" |
ダウンロードしたいファイルのURLが『https://www.haruru29.net/blog/wp-content/uploads/2018/12/corsair-ml120-pro-led.jpg』。
ダウンロードしたファイルの保存先として、『C:\test\corsair-ml120-pro-led.jpg』というパスを指定する場合は、以下のようなコマンドを実行します。
1 | curl.exe -Lo "C:\test\corsair-ml120-pro-led.jpg" "https://www.haruru29.net/blog/wp-content/uploads/2018/12/corsair-ml120-pro-led.jpg" |
『curl.exe』を使用した場合は以下のように、ダウンロード時の進捗状況が表示されるという特徴があります。
1 2 3 4 5 | PS C:\test> curl.exe -Lo "corsair-ml120-pro-led.jpg" "https://www.haruru29.net/blog/wp-content/uploads/2018/12/corsair-ml120-pro-led.jpg" % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 81921 100 81921 0 0 81921 0 0:00:01 --:--:-- 0:00:01 733k PS C:\test> |
※上記例では、保存先ファイルパスにファイル名のみ指定しているため、カレントディレクトリーにファイルが保存されます。
また、ファイルのダウンロード元URLのファイル名を使用してPCに保存する場合は、以下のような構文でコマンドを実行してください。
1 | curl.exe -LO "ダウンロードするファイルのURL" |
この構文を使用すると、ダウンロード元URLのファイル名を使ってカレントディレクトリーにファイルが保存されます。
そのため『C:\test』というファルダーに、ダウンロード元URLのファイル名(corsair-ml120-pro-led.jpg)でファイルをダウンロード・保存したい場合は、以下のようにカレントディレクトリーを保存先フォルダーに変更してから、『curl.exe』を実行してください。
1 2 | Set-Location "C:\test\" curl.exe -LO "https://www.haruru29.net/blog/wp-content/uploads/2018/12/corsair-ml120-pro-led.jpg" |
『curl.exe』ではなく『curl』を実行すると、『Invoke-WebRequest』が実行されるので要注意!
先ほど、Linux環境では『curl』コマンドがよく使用される、と記述しています。
ところがWindows PowerShellの実行コマンドの例示では、『curl.exe』を使用していました。
この点について、違和感を感じた方もいらっしゃることでしょう。
実はWindows PowerShellで『curl』と『curl.exe』を実行した場合、内部的な動作が異なります。
そしてLinux環境で使用されている『curl』コマンドと同じ動作をするのは、Windows PowerShellにおいては『curl.exe』であるため、『curl.exe』を使った構文を紹介しています。
先に、『Invoke-WebRequest』コマンドレットのAliasとして、『wget』や『iwr』が設定されている、とも書きました。
ですが以下のように、『Invoke-WebRequest』コマンドレットのAliasには、『wget』や『iwr』だけではなく、『curl』も設定されています。
1 2 3 4 5 6 7 | PS C:\test> Get-Alias | Out-String -Stream | Select-String "Invoke-WebRequest" Alias curl -> Invoke-WebRequest Alias iwr -> Invoke-WebRequest Alias wget -> Invoke-WebRequest PS C:\test> |
したがってWindows PowerShellで『curl』を実行すると、『Invoke-WebRequest』コマンドレットが実行されてしまう、というわけです。
そしてLinux環境で使用されている『curl』コマンドをWindows PowerShellで実行したい場合には、『curl.exe』を使う必要があるのです。
『curl.exe』はとても便利で、たくさんの機能を持っています。
そのため『curl.exe』を利用できるWindows(Windows 10 1803以後のWindows)環境であれば、ファイルをインターネット上からダウンロードする際は、『curl.exe』の使用をおすすめします。
『curl.exe』で利用できる機能やパラメーターを調べたいときは以下コマンドを実行するか、ネット上の各種情報サイトを確認すると良いでしょう。
1 | curl.exe --help |
以上、参考になさってくださーい!