ローカルのWebサイトがどう応答するか調べようと、PowerShellで curl を実行したところ、次のような警告が出ました(冒頭部分を抜粋)。
セキュリティ警告: スクリプトの実行リスク
Invoke-WebRequest は Web ページのコンテンツを解析します。
curlを使っているつもりなのに、なぜInvoke-WebRequestの説明が出るのか。
調べると、Windows PowerShell 5.1では curl という名前が、別のコマンドを呼び出すための別名になっていました。curl本来の動きを使いたいなら、curl.exe と書くのが手早い解決方法です。
警告の最後で「続行しますか?」と聞かれている場合は、いったん「N」で中止し、curl.exeで実行し直します。
Windows PowerShell 5.1のcurlは、別のコマンドを呼ぶ
Windows PowerShell 5.1には、curl を Invoke-WebRequest として実行するエイリアスがあります。同じ名前でも、Linuxなどで見かけるcurlの実行ファイルとは別です。
Microsoftの公式説明でも、Windows PowerShell 5.1ではこの別名があり、PowerShell 7以降には標準で設定されていないと案内されています。Microsoft:curl on Windows
2026年10月5日に手元の両方の環境で呼び出し先を確認すると、次の違いがありました。
| 確認した環境 | curl で見つかったもの |
|---|---|
| Windows PowerShell 5.1.26100.9549 | Invoke-WebRequest のエイリアス |
| PowerShell 7.6.5 | curl.exe の実行ファイル |
自分の環境で調べるには、このコマンドを使えます。
$PSVersionTable.PSVersion
Get-Command curl
結果の CommandType が Alias で、Name に curl -> Invoke-WebRequest と表示されれば、今回と同じです。Application と curl.exe が表示されれば、実行ファイルを指しています。
同名のコマンドをすべて調べたい場合は、Get-Command curl -Allを使います。手元のWindows PowerShell 5.1では、次の2件が見つかりました(表示列を抜粋)。
CommandType Name
----------- ----
Alias curl -> Invoke-WebRequest
Application curl.exe
このように両方が表示されても、curlと入力したときに呼ばれるのはエイリアスです。実行ファイルを使うために、curl.exeと明示します。
自分で設定した別名やプロファイルの影響もあるので、バージョン名だけで決めるより、この表示を見た方が早いです。
curlを使いたいときは、curl.exeと書く
Webサーバーの応答をcurlで確認するなら、次のように実行します。URLは説明用なので、調べたい自分のURLに置き換えてください。
curl.exe -I https://example.com/
-I はHEADリクエストでヘッダーを確認する指定です。通常のGETで応答ヘッダーを見たい場合は、次の書き方もできます。
curl.exe -sS -D - -o NUL https://example.com/
こちらは本文の出力を捨て、ヘッダーを表示します。HEADへの応答とGETへの応答が違うサイトを調べるときは、使い分けると混乱しにくくなります。
エイリアスを削除する方法もありますが、毎回 curl.exe と書けば設定変更は要りません。手順を人に渡すときも、何を実行するのかがはっきりします。
Invoke-WebRequestを使うなら、UseBasicParsingを指定する
最初に出た警告は、Webページの解析処理についてのものでした。Microsoftは、Windows PowerShell 5.1の Invoke-WebRequest について、2025年12月のセキュリティ更新後にこの確認が表示されることと、-UseBasicParsing を使う方法を説明しています。Invoke-WebRequestの公式説明
PowerShellのオブジェクトとしてステータスや本文を扱いたい場合は、コマンド名を明示してこう書けます。
$response = Invoke-WebRequest -Uri 'https://example.com/' -UseBasicParsing
$response.StatusCode
$response.Headers
curlのオプションを使いたいのか、PowerShellの機能を使いたいのか。ここを分けるだけで、手順の意味がかなり分かりやすくなります。
警告が出たからといって、PowerShell全体の実行ポリシーを変更する必要はありません。今回確認すべきなのは、呼び出したコマンドと、そのページ解析の方法です。
今回の出力は、curlの画面ではなかった
元のログでは、警告の後に次のような項目が表示されていました。
StatusCode : 200
StatusDescription : OK
RawContent : HTTP/1.1 200 OK
これは Invoke-WebRequest が返した結果の表示でした。「200という応答を受け取った」ことは読めますが、curlの出力例と見た目が違うのも当然です。
コマンドをコピーして使うときは、出力が説明と違っていたら、まず Get-Command で実体を調べる。今回の件は、その大切さが分かる例でした。
まとめ
PowerShellでcurlを使ったつもりなのにInvoke-WebRequestの警告が出たら、Get-Command curl で呼び出し先を確認します。
curlを使うなら curl.exe、Invoke-WebRequestを使うならその名前と必要なオプションを明示する。この使い分けで、Windows PowerShell 5.1でも迷いにくくなります。

