Windows PowerShellでwgetのネイティブな代替品はありますか?
前述のライブラリ(wget for Windows)をダウンロードしてインストールできることは知っていますが、質問です:
Windows PowerShellでは、wget
のネイティブな代替品はありますか?
私は、HTTP GETで指定されたURLからファイルを取得するために、単にwget
が必要です。例えば:
wget http://www.google.com/
前述のライブラリ(wget for Windows)をダウンロードしてインストールできることは知っていますが、質問です:
Windows PowerShellでは、wget
のネイティブな代替品はありますか?
私は、HTTP GETで指定されたURLからファイルを取得するために、単にwget
が必要です。例えば:
wget http://www.google.com/
PS 3.0以降のシンプルなワンライナーですが、これは動作しますし、あまりPSの大声を出さずに済みます:
wget http://blog.stackexchange.com/ -OutFile out.html
注意:
wget
は Invoke-WebRequest
の別名です と書く必要があります - 2014年9月20日以前は、私は
Windows 7 を使用している場合は、Windows Management Framework のバージョン 4 またはそれ以降をインストールする必要があります。
前に $ProgressPreference = "silentlyContinue"
を行うことで、大きなファイルでのダウンロード速度が大幅に改善されることが分かるかもしれません; この変数は、プログレス UI がレンダリングされるかどうかを制御します。
ファイルを取得する必要がある場合は、WebClientオブジェクトのDownloadFileメソッドを使用することができます:
$client = New-Object System.Net.WebClient
$client.DownloadFile($url, $path)
ここで、$url
はファイルのURLを表す文字列、$path
はファイルが保存されるローカルパスを表します。
次のPowerShellバージョン3には Invoke-WebRequest
があります:
Invoke-WebRequest http://www.google.com/ -OutFile c:\google.html
それは少し厄介ですが、ファイルをダウンロードするための指示を与える このブログ記事 があります。
代わりに(これは私がお勧めする1つです)あなたは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’s (s awesome) V3 one-liner (thanks for this!) - - V4 PowerShellで動作するようにするために小さな変更を加えたものです。 )_ - V4 PowerShellで動作させるためにちょっとした変更を加えただけです。
Warrenのワンライナー - 単にwget
ではなくiwr
を使っているだけですが、V3でも動作するはずです(少なくとも、私は推測しています。とにかく。しかし、(私が試したように) V4 PowerShell で実行しようとすると、PowerShell が wget
を有効な cmdlet/program として解決するのに失敗しているのがわかります。
興味のある方のために、それは - 受理された回答 (ありがとうございます!) への返信で ボブのコメント から拾ったように - 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('
現在のフォルダにファイルをダウンロードするには、このようにそれを使用します:
Get-FileFromUri http://example.com/url/of/example/file “`
または指定されたフォルダにファイルをダウンロードするには:
Get-FileFromUri http://example.com/url/of/example/file C:\example-folder
```)) {
$destination += $filename
} else {
$destination += '
現在のフォルダにファイルをダウンロードするには、このようにそれを使用します:
&001
または指定されたフォルダにファイルをダウンロードするには:
&001 + $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
}
}
}
現在のフォルダにファイルをダウンロードするには、このようにそれを使用します:
&001
または指定されたフォルダにファイルをダウンロードするには:
&001
以下の関数は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)
で問題ありません。2. パスは絶対パスでなければなりません。3. if (!$path) {...}
セクションでは、URL で指定された名前を使ってカレントディレクトリにファイルをダウンロードしたいだけの単純なケースを扱います。windows機能が設定されたらwgetを含むWindows 10のbashシェルを使用します。
WindowsにUbuntuのbashシェルをインストールする方法: YouTube: Windows上でUbuntuでBashを実行! Windows Subsystem for Linuxのドキュメント
お使いの Windows が十分に新しい場合 (バージョン 1809 またはそれ以降)、"本当の" curl が利用可能です。 ) “-O” オプション、または “–リモート名” は、保存されたファイルが URL のファイル名部分と同じ名前になるように curl に指示します。
“Invoke-WebRequest” のエイリアス “curl” と識別するために、"curl.exe" として起動する必要があります。ちなみに、それは変更なしでcmd.exeで動作します。
curl.exe -O http://demo.mediacore.tv/files/31266.mp4
(サイトは私がコメントとしてこれを追加することを許可しません、私は明らかにそのためのより多くの “評判 "を必要とするので、それは新しい答えを取得します)