私は、上記のライブラリ(Windows用のwget)をダウンロードしてインストールできることを知っていますが、私の質問はこれです:
Windows PowerShellでは、wget
に代わるネイティブの方法はありますか?
HTTP GETで与えられたURLからファイルを取得するためだけにwget
が必要です。例えば:
wget http://www.google.com/
これは簡単でPS 3.0以降のワンライナーです。
wget http://blog.stackexchange.com/ -OutFile out.html
ご了承ください:
wget
はInvoke-WebRequest
のエイリアスですWindows Server Coreインストールでは、これを次のように書く必要があります。
wget http://blog.stackexchange.com/ -UseBasicParsing -OutFile out.html
2014年9月20日以前に、私は提案しました
(wget http://blog.stackexchange.com/).Content >out.html
答えとして。ただし、>
演算子(Out-File
の別名)は入力をUnicodeに変換するため、これはすべてのケースで機能するわけではありません。
Windows 7を使用している場合は、バージョン4以降のWindows Management Frameworkをインストールする必要があります。
$ProgressPreference = "silentlyContinue"
の前にInvoke-WebRequest
を実行すると、大きなファイルではダウンロード速度が大幅に向上することがあります。この変数はプログレスUIがレンダリングされるかどうかを制御します。
ファイルを取得するだけの場合は、 WebClient オブジェクトの DownloadFile メソッドを使用できます。
$client = New-Object System.Net.WebClient
$client.DownloadFile($url, $path)
$url
はファイルのURLを表す文字列、$path
はファイルが保存されるローカルパスを表します。
$path
にはファイル名を含める必要があります。単なるディレクトリにはできません。
今後のPowerShellバージョン3には Invoke-WebRequest
があります。
Invoke-WebRequest http://www.google.com/ -OutFile c:\google.html
ちょっと面倒ですが、 このブログ記事 にファイルをダウンロードするための指示があります。
あるいは(そしてこれは私がお勧めします)あなたはBITSを使うことができます:
Import-Module BitsTransfer
Start-BitsTransfer -source "http://urlToDownload"
進行状況が表示され、ファイルが現在のディレクトリにダウンロードされます。
PowerShell V4ワンライナー:
(iwr http://blog.stackexchange.com/).Content >index.html`
または
(iwr http://demo.mediacore.tv/files/31266.mp4).Content >video.mp4
これは基本的に Warrenの(素晴らしい)V3 one-linerです(これをありがとう!) - それを機能させるための小さな変更だけですV4 PowerShellでは。
Warrenのワンライナー - 単にwget
ではなくiwr
を使用する - は、V3でも動作するはずです(少なくとも、私は思いました。しかし、それをテストしました)。とにかく。しかし、V4PowerShellで実行しようとすると(試したとおり)、PowerShellがwget
を有効なコマンドレット/プログラムとして解決できないことがわかります。
興味のある人のために、それは - 私が 受け入れられた答えに返信して Bobのコメント から選んだように - man!) - PowerShell V4ではのwget
とcurl
はInvoke-WebRequest
にエイリアスされ、デフォルトでiwr
に設定されています。したがって、wget
は解決できません(curl
はここでは機能しません)。
これは、ファイルをダウンロードする前に短いURLを解決するPowerShell関数です。
function Get-FileFromUri {
param(
[parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
[string]
[Alias('Uri')]
$Url,
[parameter(Mandatory=$false, Position=1)]
[string]
[Alias('Folder')]
$FolderPath
)
process {
try {
# resolve short URLs
$req = [System.Net.HttpWebRequest]::Create($Url)
$req.Method = "HEAD"
$response = $req.GetResponse()
$fUri = $response.ResponseUri
$filename = [System.IO.Path]::GetFileName($fUri.LocalPath);
$response.Close()
# download file
$destination = (Get-Item -Path ".\" -Verbose).FullName
if ($FolderPath) { $destination = $FolderPath }
if ($destination.EndsWith('\')) {
$destination += $filename
} else {
$destination += '\' + $filename
}
$webclient = New-Object System.Net.webclient
$webclient.downloadfile($fUri.AbsoluteUri, $destination)
write-Host -ForegroundColor DarkGreen "downloaded '$($fUri.AbsoluteUri)' to '$($destination)'"
} catch {
write-Host -ForegroundColor DarkRed $_.Exception.Message
}
}
}
現在のフォルダにファイルをダウンロードするには、これを使用します。
Get-FileFromUri http://example.com/url/of/example/file
指定したフォルダにファイルをダウンロードするには
Get-FileFromUri http://example.com/url/of/example/file C:\example-folder
次の関数はURLを取得します。
function Get-URLContent ($url, $path) {
if (!$path) {
$path = Join-Path $pwd.Path ([URI]$url).Segments[-1]
}
$wc = New-Object Net.WebClient
$wc.UseDefaultCredentials = $true
$wc.Proxy.Credentials = $wc.Credentials
$wc.DownloadFile($url, $path)
}
いくつかのコメント:
(New-Object Net.WebClient).DownloadFile($url, $path)
はうまく機能します。if (!$path) {...}
セクションでは、URLで指定された名前を使用してファイルを現在のディレクトリにダウンロードするという単純なケースを扱います。Windowsの機能がセットアップされたら、wgetを含むWindows 10 bashシェルを使用してください。
WindowsにUbuntu bash Shellをインストールする方法:
-outfileパラメータを指定したInvoke-WebRequestは文字列を必要とするため、ファイル名が引用符で囲まれていない数字で始まる場合、出力ファイルは作成されません。
例えば。 Invoke-WebRequest -Uri "http://www.google.com/" -outfile "2.pdf"
これは文字で始まるファイル名には影響しません。
あなたのウィンドウズが十分に新しいなら(バージョン1809かそれ以降のように)、利用可能な「本当の」カールがあります。 curlには、コマンドラインオプション "-O"(大文字のO;小文字は同じではありません!)があります。 URLのファイル名部分と同じ名前。
"Invoke-WebRequest"のエイリアス "curl"と区別するために、これを "curl.exe"として開始する必要があります。ちなみにそれは変更なしにcmd.exeで動作します。
ここで別の答えと同じ例を使用して
curl.exe -O http://demo.mediacore.tv/files/31266.mp4
(このサイトではこれをコメントとして追加することは許可されていません。どうやらそのためにはもっと「評判」が必要なので、新しい答えを得ます)