PowerShellでファイルをダウンロードする方法
PowerShellでインターネットからファイルをダウンロードする方法を紹介します。
PowerShellだとほんの数行でファイルのダウンロードができてしまいます。とても便利ですので是非試してみてください。
使用上の注意
まず、このソースコードを利用する上で注意事項があります。
プログラムでインターネットからファイルをダウンロードするということは、Webサーバーへアクセスすることになります。
プログラムですから、多数のファイルを高速でダウンロードすることも簡単ですが、こういった行為はWebサーバーへの攻撃とみなされてしまう可能性があります。
そのため、1ファイルごとにスリープ(Start-Sleep
コマンドレッド)を入れる等して、マナーを守って利用しましょう。
ソースコード
まずはソースコードからです。
# ダウンロードするファイルのURL
$url = "http://hoge/img/xxx.png"
# ダウンロードファイルを格納するフォルダ
$tempPath = "C:\Temp"
# URIからファイル名を取得する
$uri = New-Object System.Uri($url)
$fileName = Split-Path $uri.AbsolutePath -Leaf
# ファイルをダウンロードする
$webClient = New-Object System.Net.WebClient
$webClient.DownloadFile($uri, (Join-Path -Path $tempPath -ChildPath $fileName))
# ファイルをダウンロードする毎に1秒スリープする
Start-Sleep -Seconds 1
解説
ファイルのURLと保存先を定義する
# ダウンロードするファイルのURL
$url = "http://hoge/img/xxx.png"
# ダウンロードファイルを格納するフォルダ
$tempPath = "C:\Temp"
ダウンロードするファイルのURLと、保存先のフォルダパスを定義しています。
保存するファイル名を取得する
# URIからファイル名を取得する
$uri = New-Object System.Uri($url)
$fileName = Split-Path $uri.AbsolutePath -Leaf
ダウンロードしたファイルのファイル名を、URLのファイル名と同一にするため、URLからファイル名のみを取り出しています。
ファイルをダウンロードする
# ファイルをダウンロードする
$webClient = New-Object System.Net.WebClient
$webClient.DownloadFile($uri, (Join-Path -Path $tempPath -ChildPath $fileName))
WebClient
というインターネットへ接続するオブジェクトを生成し、DownloadFile
メソッドでファイルをダウンロードします。
DownloadFile
メソッドの第1引数は、ダウンロードするファイルのURLになります。
DownloadFile
メソッドの第2引数は、ダウンロードしたファイルを保存する先のパスになります。ここでは、保存先のフォルダとURLのファイル名をJoin-Path
で結合してパスを生成しています。
これでファイルがダウンロードされます!
攻撃とみなされないようにスリープする
# ファイルをダウンロードする毎に1秒スリープする
Start-Sleep -Seconds 1
上のサンプルでは1ファイルしかダウンロードしていないので、意味がないですが念のためダウンロード毎にスリープしましょう。
ここでは1秒のスリープを入れています。
どの程度スリープすれば攻撃とみなされないかは、難しいところです。長めのスリープを入れていても、大量のファイルを一度にダウンロードすれば、攻撃とみなされるかもしれません。
節度を持って利用しましょう。
最後まで読んでいただきありがとうございます。
また読んでくださいませ。
そんじゃーね。