windowsでcurl導入しようとしたらつまづいた話

CouchDBに興味を持ったのでいじってみようかな、と思って、CouchDBの操作にcurl使ってる記事が多いので、curl導入しようかな、と思ったらつまづいたのでメモ。

PowerShellcurlを呼ぶとデフォルトではcurlでない似た何かが呼び出される

まず最初に ここ の一番下からcurlWindows x86-84版zipを入手して、環境変数を設定し、 curl -X GET と動かしたら、-Xってなんぞや?、ってみたいなのが英語で返ってきたので違和感。 curl --helpしてもそんなようなことを返されたので、これはおかしいぞ、ということで「curl windows」と調べた。 そうすると、

qiita.com

curlコマンドはPower ShellではInvoke-WebRequestが呼び出されるらしい(wgetもそうらしい)。 対処法を探しにこの記事にリンクがあった、下のサイトへ。

devadjust.exblog.jp

Power Shellのよくわからんやつ(Invoke-WebRequest)を使いたくないので、恒久的に関連付けを切ろうと対処その3をすすめた。 %HOMEPATH%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1を編集するらしいが存在しない。

Microsoft.PowerShell_profile.ps1を編集してみた

調べ進めると、

qiita.com

この記事を見つけた。記事に従って PS> $profile

Microsoft.PowerShell_profile.ps1の居場所をPSに聞き、

PS> new-item -path $profile -itemtype file -force

で強引にファイルを作った。

また、前の記事の戻って、Microsoft.PowerShell_profile.ps1に

del alias:curl

と記述して保存。 そしてPowerShellを再起動。しかし、

. : このシステムではスクリプトの実行が無効になっているため、ファイル %HOMEPATH%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 を読み込むことができません。詳細については、「about_Exec
ution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : セキュリティ エラー: (: ) []、PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

と出た。

Shellの実行権限関連のエラー

またいろいろ調べてみると、

totech.hateblo.jp

なるほど。どうも、権限のエラーらしい。ということで、

PS> powershell -ExecutionPolicy RemoteSigned .\Microsoft.PowerShell_profile.ps1

を実行。しかし、

del : パス 'Alias:\curl' が存在しないため検出できません。
+ del alias:curl
+ ~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Alias:\curl:String) [Remove-Item], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand

と出る。

結論 del alias:curlは古かった

この原因を2,30分くらい探していたら、

qiita.com

上の記事を発見。どうも、

del alias:curl

と書くのは古いらしく、最近ではsalで変更できるらしい。 ただ、salも永続的に設定を保存してくれるわけではなさそうで、 上の記事Microsoft.PowerShell_profile.ps1をcurl.exeのある場所に値を一部替えれば出来るはず…。 まだPowerShellでは成功するもののHyperでは権限関連でエラーが。再起動しても上手くいかない…

感想

M$さん、破壊的変更はやめてくれ… あと、PowerShellはcmdよりエラーが分かり難いイメージがすごいですね…今更ながら。curl軽く使うくらいなら普通にWSLインストールすればよかったなぁ、って今では結構後悔。 CouchDBの話はまた別の機会にでも。