windows – curl と同等の PowerShell

curl powershell windows

PowerShellにはcurlに相当するものはありますか?何か似たような組み込み機能を持っているのでしょうか、それとも3rdパーティのcmdletがあるのでしょうか?

  174  Borek Bernard  2011-10-10


ベストアンサー

PowerShell 3.0には新しいコマンドInvoke-RestMethodがあります

Invoke-RestMethod (Microsoft.PowerShell.Utility) - PowerShell
The Invoke-RestMethod cmdlet sends HTTP and HTTPS requests to Representational State Transfer (REST) web services that return richly structured data. PowerShell...

more detail:

PowerShell cURL – Yes It Exists – Invoke-RestMethod – DiscoPosse.com

118  Michael Kelley  2013-05-04


Powershell 5.0では、それ以前でなければ、curlInvoke-WebRequestのエイリアスです

PS> Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize

CommandType Name                      Version Source
----------- ----                      ------- ------
Alias       curl -> Invoke-WebRequest
Alias       iwr -> Invoke-WebRequest
Alias       wget -> Invoke-WebRequest

アンエイリアスコマンドを使用するには

PS> Invoke-WebRequest -Uri https://localhost:443/
PS> Invoke-WebRequest -Uri https://www.google.com

そこで、以下のようにリクエストのいくつかのプロパティを返します

PS> Invoke-WebRequest -Uri https://www.google.com

StatusCode        : 200
StatusDescription : OK
Content           : <!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en-AU"><head><meta content="text/html; charset=UTF-8"
http-equiv="Content-Type"><meta content="/images/branding/googleg/1x/...
RawContent        : HTTP/1.1 200 OK
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Vary: Accept-Encoding

それとも内容だけか

PS> Invoke-WebRequest -Uri https://www.google.com | Select-Object -ExpandProperty Content

<!doctype html><html itemscope="" itemtype="http://schem[etc ...]

等価なエイリアスコマンドは

PS> curl -Uri https://www.google.com
PS> curl -Uri https://www.google.com | Select-Object -ExpandProperty Content

Powershell のデフォルトや他のエイリアスを利用して、コマンドを短縮することができます

PS> curl https://www.google.com
ps> curl https://www.google.com | Select -ExpandProperty Content

… しかし、私はそれをお勧めしません。曖昧なコマンドは、あなたのコードを読むときに他の人を助けます

Update:

Powershell 6.x

エイリアスの使用はお勧めしません

Powershell 6.x “Core” から curlInvoke-WebRequest のエイリアスではなくなりました (エイリアス wget も削除されました)。代わりに Invoke-WebRequest を直接使用してください

PS> Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize

CommandType Name                     Version Source
----------- ----                     ------- ------
Alias       iwr -> Invoke-WebRequest

RFC “to to remove the aliases curl and wget from the Windows PowerShell”での動きが明らかに拒否されたにもかかわらず、Curl はもはや Invoke-WebRequest (Powershell 6.2.3 でテストされた) のエイリアスではありません

そのRFCは、”wget/curlエイリアスはすでにPowerShell Coreから削除されていたので、[それらのエイリアスを持つことの問題]はWindows PowerShellに限定されていた “と注意を促しています

結論として、Powershell チームはまた、ユーザーに「スクリプト内のエイリアスに頼らないように」と奨励しています

v6ak がコメントで指摘しているように、PowerShell (5.0 以下) で curlwget を使用すると、次のような問題が発生する可能性があります: サイドバイサイドでインストールされている場合、意図せずに本物の curl や wget を呼び出してしまいます

New Encoding

Powershell “core” (6.x 以上) をアップグレードして、Invoke-WebRequest (および他の多くのテキスト出力コマンド) を使う際に、デフォルトのエンコーディング utf8NoBOM を利用できるようにすることをお勧めします。もしこれを明示的に行っているのであれば、以下のようにすることができます

Invoke-WebRequest `
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
| Select-Object -ExpandProperty Content `
| Out-File jquery.fancybox.min.js `
-Encoding utf8NoBOM

しかし、より短い、暗黙の、コマンドを使用する場合でも

Invoke-WebRequest `
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
-OutFile jquery.fancybox.min.js

utf8NoBOMでエンコードされます(Visual Studio Codeで保存したファイルを開いてステータスバーに「UTF-8」と表示されていることを確認するなどで確認できます)

utf8NoBOM で保存されたファイルは、様々な生態系を移動する際に問題が少ない傾向にあります。もちろん、他のエンコーディングが必要な場合は、明示的に代替のエンコーディングを設定することができます

Powershell 5.0以下では、デフォルトはおろか、utf8NoBOMのエンコーディングも利用できませんでした

Details:

58  John Bentley  2015-10-30


優れたコマンドラインカンフーブログには、a postがあり、ここで彼らはcurl、wgetと関連するPowerShellコマンドを比較しています

一言で言えば

(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html","C:\hello-world.html")

あるいは、お使いのPowershell/.NetのバージョンがDownloadStringの2つのパラメータを受け付けない場合

(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html") > "C:\hello-world.html"

29  ipr101  2011-10-10


また、Git for Windowsをインストールし、パスにGitのbinフォルダを置くこともできます。Git のインストールには、とりわけ curl.exe が含まれています。インストールしたら、パスに%programfiles(x86)%\git\binを入れるだけです。そうすれば、Windows のコマンドプロンプトや PowerShell コンソールから curl コマンドが使えるようになります

15  Jamie  2013-04-04


ChocolateyでcURLをインストールし、PowerShell CLIやcmdでcurlを利用できるようにすることができます

14  Spoike  2013-01-22


Windows で wgetcurl に最も近いものは bits (Background Intelligent Transfer Service) であり、これには powershell 用のスニペットがいくつか用意されています

1  akira  2011-12-11


curl
cmd, bash

curl -H "Host: whoami.local" 192.168.4.4

powershell

Invoke-WebRequest -H @{"Host"="whoami.local"} -UseBasicParsing 192.168.4.4

# or
# $(Get-Command curl) return  "curl -> Invoke-WebRequest"
curl -H @{"Host"="whoami.local"} -UseBasicParsing 192.168.4.4

1  Archon  2019-06-04


insider プレビュービルド 17063 または リリースバージョン 1803 以降を使用している場合は、直接実行できる curl.exe が既に存在します

この中の一人であれば – HAPPY NEW YEAR! 🙂 Windows 10 Insider build 17063以降には、CmdやPowerShellから直接実行できる本物のcurlやtarの実行ファイルが含まれるようになりました

タールとカールが Windows に登場!

PowerShellでは、curlが既存のエイリアスの場合、明示的にcurl.exeを実行する必要があります

1  phuclv  2020-04-19


このコマンドは動作するはずです

Invoke-WebRequest -UseBasicParsing -Uri http://example.com/

PowerShell 3.0 以降の Microsoft.PowerShell.Utility の一部です

こちらも参照してください。Powershellでテキストファイルに書き込むために$webclient.downloadstringを取得する

0  kenorb  2018-02-13


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