職場 PC が Windows なのだが UNIX ライクなコマンドが使いたくて Gow を使っている。ところが、最近 PowerShell を 3.0 にアップデート*1したところ curl が上手く動かなくなった。調べたところ、Invoke-WebRequest コマンドレットのエイリアスに curl, wget が割り当てられているのが原因だった。忘れたときのためにメモしておく。
curl がエラーになる
PS >curl --silent http://www.yahoo.co.jp/ Invoke-WebRequest : 引数 'http://www.yahoo.co.jp/' を受け入れる位置指定パラメーターが見つかりません。 発生場所 C:\Users\ebi\bin\download.ps1:100 文字:1 + curl --silent "http://www.yahoo.co.jp/" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Invoke-WebRequest]、ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
エラーメッセージを読むと curl を Invoke-WebRequest コマンドレットとして実行しているのだが、まさかと思いつつエイリアスを調べてみるとそのまさかだった。
PS >Get-Alias -Definition Invoke-WebRequest CommandType Name ModuleName ----------- ---- ---------- Alias curl -> Invoke-WebRequest Alias iwr -> Invoke-WebRequest Alias wget -> Invoke-WebRequest
解決
curl, wget のような紛らわしいエイリアスは要らないので削除する。
PS >Remove-Item -Path Alias:curl PS >Remove-Item -Path Alias:wget PS >Get-Alias -Definition Invoke-WebRequest CommandType Name ModuleName ----------- ---- ---------- Alias iwr -> Invoke-WebRequest
これで curl.exe が使われるようになるがエイリアス削除は現在のセッションにしか反映されない。そこで $profile の中でエイリアス削除するようにした。
*1:ハンコが何個必要になったかは書かない