HIRO's.NET

VB.NET, C#, PowerShell Tipsサイト

 VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。

 基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。

HIRO's.NET RSSHIRO's.NET RSS


PowerShellの開発でお困りのことはありませんか?
そんな悩みは当サイトで解決!!

HOME > PowerShell Tips > 自作関数 Tips メニュー

03.HTTPダウンロードする

 
UPDATE:2008/05/02    
 



PowerShellでHTTPダウンロードするには、System.Net.WebClient クラスを使用します。
下記は、http://hiros-dot.net/ にあるinedex.htmlファイルを C:\Workにindex.htmlという名前で保存します。

List1

PS > $webClient = new-object System.Net.WebClient
PS > $webClient.DownloadFile("http://hirosdot.net/index.html", "C:\Work\index.html")

上記を再利用しやすくするために、関数化したものが下記です。

Download-File.ps1

#===============================================================================
# Download-File: HTTPダウンロードする
# Param:
# $url : ダウンロードするファイルURL
# $SaveDir : 保存先ディレクトリ(省略した場合はカレントディレクトリ)
# $filename : 保存ファイル名(省略した場合はダウンロードしたファイル名となる)
#
# ヘルプを見る場合は
# Download-File /?
#
# copyright HIRO's.NET(http://hiros-dot.net/)
#===============================================================================
function global:Download-File
{
Param ([string]$url, [string]$SaveDir, [string]$filename)

#ヘルプの参照か?
if ( $url -eq "-?" )
{
$helpmsg = @"
書式`r`n
Download-File [`$url] [[`$SaveDir]] [[`$filebame]]`r`n
パラメータ`r`n
`$url
ダウンロードするファイルURL`r`n
`$SaveDir
ダウンロードしたファイルを保存するディレクトリ
省略した場合はカレントディレクトリに保存します`r`n
`$filename
保存ファイル名
省略した場合はダウンロードしたフィル名となります`r`n
`r`n
使用例`r`n
# http://hiros-dot.net/index.html をダウンロードする
# この場合はカレントディレクトリに index.html というファイル名で保存される
Download-File "http://hiros-dot.net/index.html"

#指定したディレクトリに保存する
Download-File "http://hiros-dot.net/index.html" "C:\Work"

#指定したディレクトリに名前を付けて保存する
#この場合は C:\Work に sample1.html という名前で保存する
Download-File "http://hiros-dot.net/index.html" "C:\Work" "sample1.html"

#ヘルプを参照する
Get-DateFileName /?

"@
Write-Host $helpmsg
return
}


$webClient = new-object System.Net.WebClient

#保存先が指定されていない場合
if ( $SaveDir.Length -eq 0 )
{
#カレントディレクトリを保存先にする
$SaveDir = $(get-location).Path
}

#保存ファイル名が指定されていない場合
if ( $filename.Length -eq 0 )
{
#指定されたURLからファイル名を取得
$uri = new-object Uri($url)
$filename = $uri.Segments[$uri.Segments.Length-1]
}

if ( $filename -eq "/" )
{
Write-Host "ダウンロードできません。`r`nURLはファイル名を含めて指定してください!!" -foregroundcolor red
return
}

#保存先パス文字列の作成
$filePath = [System.IO.Path]::Combine($SaveDir, $filename)

#ダウンロードする
$webClient.DownloadFile($url,$filePath)
}

この関数の書式は

Download-File ダウンロードするファイルURL 保存先ディレクトリ 保存ファイル名

です。

下記のように、URLだけを指定した場合は、対象ファイルをカレントディレクトリに保存します。

List2

Download-File "http://hiros-dot.net/index.html" 

URLと保存先だけを指定することもできます。

List3

PS > Download-File "http://hiros-dot.net/index.html" "c:\Work"

任意の名前をつけて保存する場合は、第3引数にファイル名を指定します。

List4

PS > Download-File "http://hiros-dot.net/index.html" "C:\Work" "sample1.html"

ヘルプの表示は下記のようにします。

List5

PS > Download-File -?