2011-11-28 09:56:40 +0000 2011-11-28 09:56:40 +0000
293
293

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

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

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

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

wget http://www.google.com/

回答 (11)

243
243
243
2013-12-26 06:47:06 +0000

PS 3.0以降のシンプルなワンライナーですが、これは動作しますし、あまりPSの大声を出さずに済みます:

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

注意:

  • wgetInvoke-WebRequest の別名です
  • Invoke-WebRequest は HtmlWebResponseObject を返しますが、これにはリンク、画像、フォーム、入力フィールドなど、多くの有用なHTML解析プロパティが含まれています。しかし、この場合は生のコンテンツを使用しているだけです
  • ファイルの内容はディスクに書き込む前にメモリに保存されるので、この方法は大きなファイルをダウンロードするのには不向きです
  • Windows Server Core のインストールでは、これを

と書く必要があります - 2014年9月20日以前は、私は

Windows 7 を使用している場合は、Windows Management Framework のバージョン 4 またはそれ以降をインストールする必要があります。

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

186
186
186
2011-11-28 10:20:08 +0000

ファイルを取得する必要がある場合は、WebClientオブジェクトのDownloadFileメソッドを使用することができます:

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

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

88
88
88
2012-08-10 23:38:18 +0000

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

Invoke-WebRequest http://www.google.com/ -OutFile c:\google.html
18
18
18
2011-11-28 10:18:36 +0000

それは少し厄介ですが、ファイルをダウンロードするための指示を与える このブログ記事 があります。

代わりに(これは私がお勧めする1つです)あなたはBITSを使用することができます:

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

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

6
6
6
2014-05-25 10:22:13 +0000

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 では、wgetcurl は、デフォルトで Invoke-WebRequest に設定されている iwr にエイリアスされているからです。したがって、wgetは解決できません(ここではcurlが動作しないのと同様に)

4
4
4
2014-08-12 10:48:51 +0000

ここにファイルをダウンロードする前に短い 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

2
2
2
2014-12-15 15:26:13 +0000

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

いくつかのコメント:

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

windows機能が設定されたらwgetを含むWindows 10のbashシェルを使用します。

WindowsにUbuntuのbashシェルをインストールする方法: YouTube: Windows上でUbuntuでBashを実行! Windows Subsystem for Linuxのドキュメント

0
0
0
2018-11-27 18:05:22 +0000

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

0
0
0
2019-03-04 13:25:33 +0000

お使いの Windows が十分に新しい場合 (バージョン 1809 またはそれ以降)、"本当の" curl が利用可能です。 ) “-O” オプション、または “–リモート名” は、保存されたファイルが URL のファイル名部分と同じ名前になるように curl に指示します。

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

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

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

-1
-1
-1
2019-04-27 20:13:44 +0000

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