Windows PowerShell での wget のネイティブな代替手段は?

powershell powershell-2.0 powershell-3.0 powershell-4.0 windows

前述のライブラリ(wget for Windows)をダウンロードしてインストールできることは知っていますが、私の質問はこれです

Windows PowerShellでは、wgetのネイティブな代替手段はありますか?

HTTP GETで与えられたURLからファイルを取得するためには、単純にwgetが必要です。例えば

wget http://www.google.com/

  312  jsalonen  2011-11-28


ベストアンサー

ここにPS3.0以降の簡単なワンライナーがあって、それが効いてPSのバーフがあまり絡まない

wget http://blog.stackexchange.com/ -OutFile out.html

Note that:

  • wgetInvoke-WebRequestのエイリアスです
  • Invoke-WebRequest は HtmlWebResponseObject を返しますが、これにはリンクや画像、フォーム、InputFields などの HTML 解析に便利なプロパティがたくさん含まれています
  • ファイルの内容はディスクに書き込む前にメモリに保存されるため、この方法は大容量のファイルをダウンロードするのには不向きです
  • 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をお使いの場合は、Windows Management Frameworkのバージョン4以降をインストールする必要があります

$ProgressPreference = "silentlyContinue"Invoke-WebRequestの前に行うことで、大きなファイルのダウンロード速度が大幅に改善されることがわかります; この変数はプログレスUIがレンダリングされるかどうかを制御します

267  Warren Rumak  2013-12-26


ファイルを取得するだけなら、DownloadFile オブジェクトの WebClient メソッドを使うことができます

$client = New-Object System.Net.WebClient
$client.DownloadFile($url, $path)

ここで、$urlはファイルのURLを表す文字列、$pathはファイルが保存されるローカルパスを表します

$pathはファイル名を含まなければならないことに注意してください

188  Traveling Tech Guy  2011-11-28


今後のPowerShellバージョン3にはInvoke-WebRequestがあります

Invoke-WebRequest http://www.google.com/ -OutFile c:\google.html

92  user4514  2012-08-10


ちょっとごちゃごちゃしていますが、このブログ記事にファイルのダウンロード方法が書いてあります

あるいは(これは私がお勧めする方法の一つですが)bitsを使うこともできます

Import-Module BitsTransfer
Start-BitsTransfer -source "http://urlToDownload"

進行状況が表示され、現在のディレクトリにファイルをダウンロードします

19  Matthew Steeples  2011-11-28


PowerShell V4 ワンライナー

(iwr http://blog.stackexchange.com/).Content >index.html`

or

(iwr http://demo.mediacore.tv/files/31266.mp4).Content >video.mp4

これは基本的には Warren の (素晴らしい) V3 のワンライナー (これに感謝します!) – V4 PowerShell で動作するようにほんの少し変更を加えたものです

Warren のワンライナーiwr ではなく wget を使っているだけですが、V3 でも動作するはずです (少なくとも、私はそう思っています。)とにかく。しかし、(私が試したように) V4 の PowerShell で実行しようとすると、PowerShell が wget を有効な cmdlet/program として解決するのに失敗しているのがわかります

興味のある方のために、それは – Bob のコメントから 受け入れられた回答 (ありがとうございます!) への返信で拾ったように – PowerShell V4 では、wgetcurlInvoke-WebRequest にエイリアスされており、デフォルトでは iwr に設定されています。したがって、wget は解決できません (同様に curl もここでは動作しません)

7  eyecatchUp  2014-05-25


ダウンロードする前に短い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

4  user25986  2014-08-12


以下の関数で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)
}

Some comments:

  1. 最後の4行は、認証プロキシの後ろにいる場合にのみ必要です。単純な使い方であれば、(New-Object Net.WebClient).DownloadFile($url, $path)で問題ありません
  2. ダウンロードはカレントディレクトリでは行われないので、パスは絶対的なものでなければなりません
  3. if (!$path) {...}セクションでは、URLで指定された名前を使ってカレントディレクトリにファイルをダウンロードしたいだけの単純なケースを扱います

2  Paul Moore  2014-12-15


お使いの Windows が十分に新しい場合 (バージョン 1809 またはそれ以降)、”本当の” curl が利用可能です。 curl はコマンドライン オプション “-O” (大文字の O; 小さい文字は同じことをしません!) オプション “-O” (代わりに “–リモート名”) は、保存されたファイルが URL のファイル名部分と同じ名前になるように curl に指示します

Invoke-WebRequest “のエイリアス “curl “からそれを識別するために、”curl.exe “としてこれを起動する必要があります。ちなみに、cmd.exeではそのまま動作します

ここでは別の回答と同じ例を使用します

curl.exe -O http://demo.mediacore.tv/files/31266.mp4

(サイトは私がコメントとしてこれを追加することを許可しません、私は明らかにそのためのより多くの “評判 “を必要とするので – それは新しい答えを取得します)

2  Dweia  2019-03-04


Windowsの機能を設定したら、wgetを含むWindows 10のbashシェルを使用します

WindowsにUbuntuのbashシェルをインストールする方法

YouTube.Windows上のUbuntuでBashを実行する!

Windows Subsystem for Linux ドキュメンテーション

1  Miloud Eloumri  2017-09-27


outfile パラメータを指定した Invoke-WebRequest は文字列を想定しているので、ファイル名が数字で始まり、引用符で囲まれていない場合、出力ファイルは作成されません

例えばInvoke-WebRequest -Uri "http://www.google.com/" -outfile "2.pdf"

これは、文字で始まるファイル名には影響しません

0  Zimba  2018-11-27


これでブラウザが初期化されないことを回避できるはずです。パラメータ “-UseBasicParsing” に注意してください

Invoke-WebRequest http://localhost -UseBasicParsing

-1  Joe Healy  2019-04-27


タイトルとURLをコピーしました