curlに相当するPowerShell


145

curlPowerShellに相当するものはありますか?同様のビルトイン機能がありますか、サードパーティのコマンドレットがありますか?


5
閉まっている?どのように閉じに関するsuperuser.com/questions/34492/...superuser.com/questions/295021/...superuser.com/questions/71446/...などのホストを?
ボレックバーナード

1
実際、この質問は私にとって十分に公平に見えますか?しかし、古い答えがあります:stackoverflow.com/questions/340553/…–
Rup

1
PowerShellでのcurlの使用に関する次の記事を
ご覧ください

回答:


99

8
何を達成しようとしているかによって、代わりにInvoke-WebRequestコマンドが必要になる場合があります。
ティモシーリーラッセル14年

28
また、Powershell として、curlまたはwgetPowershellでエイリアスになりました。
CMCDragonkai 14年

17
構文がまったく異なるため、エイリアスを使用するのは奇妙です。MSがパッケージマネージャーを出荷し、一般的で基本的なツールを簡単に入手したくない場合、偽のエイリアスの背後に隠すことで状況が改善されることはありません。
MichaelGG 14年

1
Invoke-WebRequestの最大の問題は、IEが「初期化」されていないと機能しないことです。そのため、パイプラインスクリプトまたはDSCスクリプトを記述するときは、最初に余分な作業を行う必要があります。または、Invoke-RestMethodを使用できます。
LimpingNinja

1
@LimpingNinja、これのソースはありますか?たぶん、あなたが経験した問題はこれによるものでした: "-UseBasicParsingは、Document Object Model(DOM)解析なしでHTMLコンテンツに応答オブジェクトを使用します。ServerCoreインストールなどのコンピューターにInternet Explorerがインストールされていない場合Windows Serverオペレーティングシステムの。」msdn.microsoft.com/powershell/reference/3.0/
マイケルケリー

42

Powershell 5.0の時点では、そうでない場合curlはのエイリアスですInvoke-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

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

更新:

Powershell 6.x

エイリアスの使用は推奨されません

以下のようにPowerShellの6.xの「コア」は curl、もはやの別名ではないInvoke-WebRequest(別名wgetも除去されます)。代わりにInvoke-WebRequest直接使用してください。

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

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

RFCで「Windows PowerShellからcurlとwgetのエイリアスを削除する」という動きが明らかに拒否されたにもかかわらず、CurlはInvoke-WebRequestのエイリアスではなくなりました(Powershell 6.2.3でテスト済み)。

RFCでは、「wget / curlエイリアスは既にPowerShell Coreから削除されているため、[これらのエイリアスを持つ]問題はWindows PowerShellに限定されていました。」

結論として、Powershellチームはユーザーに「スクリプト内のエイリアスに依存しない」ことを推奨しています。

@ v6akが使用コメントで述べたようにcurl、およびwgetPowerShellで(5.0以下)の問題であることができる:サイドバイサイドをインストールした場合、意図せずに実際のカールやwgetのを呼び出します。そして、いずれにせよ、混乱を引き起こします。

新しいエンコード

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

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では、デフォルトはもちろんのこと、エンコードは使用できませんでした。

詳細:


-Uriフラグは何をしているのですか... 'curl -Uri api.github.com/rate_limit ' に対して、それを使用してもしなくても同じ結果が得られ ます。私はこれを検索しましたが、まだ
わかり

1
powershellでは、パラメーター値の順序から暗黙的に派生するパラメーター名があります。これはを見て確認できますget-help curl。が表示さInvoke-WebRequest [-Uri] <Uri> ...れ、角かっこは[]省略-Uriできることを示しています(したがって、暗黙的に呼び出されます)。メインポストで述べたように、一般的に、あなたは明示的にすべきです(あなたまたは他の人が将来あなたのコードを読む予定です)。
ジョンベントレー

ああ-ありがとう。だから私はそれを[]
省い

どういたしまして。あなたはそれを持っています。あなたが見つけるのPowerShellコマンドの構文の説明はget-helpいくつかのバージョンに記載されているen.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form。Extended Backus Naur Formのいくつかのバージョンは、出くわす多くの言語の構文を記述するために使用される可能性が高いため、これを読んだり、ざっと読んだりするのはよいことです。en.wikipedia.org/wiki/…で、括弧[ ...]はオプションの構文を示していることに気付くでしょう。
ジョンベントレー

ですが、混乱を招くため、使用しないことをお勧めします。Linux版PowerShell Core 6.1.3では、curlもwgetもエイリアスではありません。それらは元のcurlとwgetを参照します(システムに存在する場合)。これらは異なるため、これらのエイリアスの使用は混乱と非マルチプラットフォームスクリプトの潜在的なソースです。
16:04のv6ak

29

優れたCommand Line Kung Fuブログには curl、wget、および関連するPowerShellコマンドを比較する投稿があります

手短に:

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

または、Powershell / .Netのバージョンが2つのパラメーターを受け入れない場合DownloadString

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

この答えは、DownloadFileうまく機能する機能にも言及しています。
ポールヒックス

15

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



1

近いものwgetcurl窓には、あるビットのPowerShellの準備ができて、いくつかのスニペットを持っている(バックグラウンドインテリジェント転送サービス)、。


3
BITSはwgetやcurlとは異なる問題を解決すると思います。
ドナルドバード

Httpサーバーからのものを取得しますか?
アキラ

2
いいえ:)、バックグラウンドインテリジェンスの一部。
ドナルドバード


0

カール

cmd、bash

curl -H "Host: whoami.local" 192.168.4.4

パワーシェル

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.