PowerShellにはcurl
に相当するものはありますか?何か似たような組み込み機能を持っているのでしょうか、それとも3rdパーティのcmdletがあるのでしょうか?
174 Borek Bernard 2011-10-10
PowerShell 3.0には新しいコマンドInvoke-RestMethod
があります
more detail:
118 Michael Kelley 2013-05-04
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
… しかし、私はそれをお勧めしません。曖昧なコマンドは、あなたのコードを読むときに他の人を助けます
Update:
Powershell 6.x
エイリアスの使用はお勧めしません
Powershell 6.x “Core” から curl
は Invoke-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 以下) で curl
と wget
を使用すると、次のような問題が発生する可能性があります: サイドバイサイドでインストールされている場合、意図せずに本物の 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:
- Powershell 6、リファレンス、Microsoft.PowerShell.Utility、Out-File、パラメータ、-Encoding
- Powershell 6, What’s new, What’s new in Powershell Core 6.x, Breaking changes in Powershell Core 6.0, “$OutputEncodingをASCIIではなくUTF-8 NoBOMエンコーディングを使用するように変更 #5369”
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 で wget
や curl
に最も近いものは 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