はじめに
Javaを使いはじめてWSLではなくWindows環境での開発機会が増えました。
Linuxコマンドと異なりWindowsのPowerShellだとcurlの使い勝手が悪いので、エイリアスで調整をしたプロセスを残しておきます。
curl.exe と毎回入力するのが面倒な方がいればご参考になると幸いです。
やりたいこと
PowerShellでcurl.exeではなくcurlと入力したらcurlできるようにしたい
前提
curl -X POST http://localhost:8080/name
とコマンド入力するとエラーが出る。
Invoke-WebRequest : A parameter cannot be found that matches parameter name 'X'.
At line:1 char:6
+ curl -X POST http://localhost:8080/name
+~~ + CategoryInfo : InvalidArgument: (:) [Invoke-WebRequest],
ParameterBindingException + FullyQualifiedErrorId : NamedParameterNotFound,
Microsoft.PowerShell.Commands.InvokeWebRequestCommand
原因
- Windowsには標準でcurlコマンドが使えない
- 使いたいならcurl.exeと入力するとcurlっぽい動きをする
- ただ何回も.exeまで入力するのは手間
解決策
- WSLでUbuntuなどをつかう
- すでにWindows環境でIntelliJなどをインストールしているので今回はパス
以下の記述はコメントいただいた内容を元に追記しています
- デフォルトのcurlエイリアス(Invoke-WebRequestコマンドのエイリアス)を削除する
- やり方
- メモ帳、VSCodeなどで以下のスクリプトを記述
# This script will add the Remove-Item alias:curl command to an existing PowerShell profile or create one if it does not exist # If it is run from PowerShell ISE an ISE profile will be created: Microsoft.PowerShellISE_profile.ps1 # Otherwise a regular profile will be created: Microsoft.PowerShell_profile.ps1 $removeCurlAlias = @" # Remove Alias curl -> Invoke-WebRequest Remove-Item alias:curl "@ if (-Not (Test-Path $Profile)) { New-Item –Path $Profile –Type File -Value "$removeCurlAliasrn" } else { Add-Content –Path $Profile -Value "rn$removeCurlAlias" }
- Remove-CurlAlias.ps1などの名前で保存
- PowerShell上でRemove-CurlAlias.ps1を実行
- デスクトップに保存した場合、デスクトップまで移動して
.\Remove-CurlAlias.ps1
とコマンド
- デスクトップに保存した場合、デスクトップまで移動して
- PowerShellを再起動
- 以下のエラーが出た場合の対処法
rn# : The term 'rn#' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At /pass/to/your/profile + rn# Remove Alias curl -> Invoke-WebRequest + ~~~ + CategoryInfo : ObjectNotFound: (rn#:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException
- 上記エラー分のAT以降のパスを指定してnotepadを開く
notepad /pass/to/your/profile
-
rn#
と記述されている箇所を#
に修正し、上書き保存 - PowerShellを再起動
- 上記エラー分のAT以降のパスを指定してnotepadを開く
- デフォルトのcurlエイリアス(Invoke-WebRequestコマンドが呼ばれるエイリアス)が削除され、自動でcurlと入力すると、curl.exeが呼ばれるように!
- メモ帳、VSCodeなどで以下のスクリプトを記述
- やり方
もともと本記事は以下の内容で記載していました
- エイリアスを使ってclなどcurl以外のコマンドで使う
- やり方
-
プロファイルファイルにエイリアスを記述
-
プロファイルファイルが開けるか試す
notepad $PROFILE
-
開けなかった場合プロファイルファイルを作成する
New-Item -Path $PROFILE -ItemType File -Force
-
Force
オプションにより、ファイルが存在しない場合は新規作成され、既に存在する場合は上書きされません。
-
-
ファイルが作成されたら再度プロファイルファイルを開く
notepad $PROFILE
-
メモ帳が開かれるので、以下を記述して保存
Set-Alias cl "curl.exe"
-
-
管理者権限でPowerShellを起動
-
実行ポリシーを確認
Get-ExecutionPolicy
- Restrictedの場合変更が必要
-
実行ポリシーを変更
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
- RemoteSigned
- ローカルで作成したスクリプトは実行可能だが、インターネットからダウンロードしたスクリプトは、署名されていない限り実行できないという設定
- インターネットからダウンロードしたスクリプトに悪意のあるコードが含まれている場合、そのスクリプトを無断で実行できないことはセキュリティ上の保護になる
- CurrentUser
- 前提として実行ポリシーにはポリシー(RemoteSignedなど)と、スコープという概念がある
- ポリシーはセキュリティの厳しさ、スコープはポリシーの適用範囲
- CurrentUserを設定すると、現在のユーザーのみRemoteSignedが適用され、同じマシンで他のユーザーが利用する際には別のポリシー(デフォルトでは一番厳しいポリシー)が適用される
- 詳細は以下参照
- RemoteSigned
-
-
PowerShellを再起動するとエイリアスが使えるように!
-
- やり方