Windows のコマンドプロンプトでは claude コマンドが使えるのに、PowerShell ではエラーになってしまう場合の対処法を解説します。
なぜコマンドプロンプトでは動くのに PowerShell では動かないのか?
結論から言うと、原因は PowerShell がコマンドを解決する仕組みと実行ポリシーにあります。
コマンド解決の優先順位
PowerShell には独自の「コマンド解決の優先順位」が存在します。具体的には次の順番でコマンドを探しに行きます。
- 関数
- エイリアス
- Cmdlet
- スクリプトファイル(
.ps1) - 実行ファイル(
.exe、.cmd、.bat…)
つまり、同じフォルダに claude.ps1 と claude.cmd があった場合、PowerShell は 必ず ps1 を優先します。
実行ポリシーの問題
ところが、多くの環境では PowerShell の実行ポリシーが「Restricted(制限付き)」のままになっています。この場合、.ps1 ファイルは実行できません。
そのため「claude.ps1 を呼ぼうとしたが、ポリシーでブロック → エラーになる」という流れが発生します。
一方、コマンドプロンプトは .cmd をそのまま実行するため問題が起きない、というわけです。
解決方法
解決策は大きく分けて 3 通りあります。環境やセキュリティポリシーに応じて選んでください。
方法1:.cmd を明示して実行する(安全・簡単)
最も安全な方法は、PowerShell 上で .cmd を明示的に呼び出すことです。
claude.cmdあるいはフルパスを指定すれば確実です。
& "$env:USERPROFILE\AppData\Roaming\npm\claude.cmd"これなら .ps1 を無理に実行する必要がなく、セキュリティ設定も変更しません。
方法2:エイリアスで .cmd を優先させる
毎回 .cmd を付けるのが面倒な場合は、PowerShell のプロファイルにエイリアスを設定することもできます。
実際のパスを確認
$PROFILE存在チェック
Test-Path $PROFILEFalseなら ファイル未作成(=普通の状態)
ファイルが存在しない場合は、親フォルダー → ファイルの順で作成
# 親フォルダーを作成(存在しなくてもOK)
New-Item -ItemType Directory -Path (Split-Path -Parent $PROFILE) -Force | Out-Null
# プロファイルファイルを作成(上書きしない)
New-Item -ItemType File -Path $PROFILE -Force | Out-Nullプロファイルを開く
notepad $PROFILEエディタが開いたら、次の1行を追加して保存します。
Set-Alias claude "$env:USERPROFILE\AppData\Roaming\npm\claude.cmd"これで、次回以降は、PowerShellで拡張子.cmdなしのclaude コマンドを実行することができます。
claudeエラーとなる場合は、次の方法3も追加で実行します。
方法3:実行ポリシーを緩和する(要注意)
.ps1 を直接動かしたい場合は、PowerShell の実行ポリシーを変更する方法もあります。
自己責任になりますが、現在のユーザーだけに限定して緩和する場合は次のコマンドを実行します。
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned- ローカルで作成した
.ps1は実行可能 - インターネットから取得した
.ps1は署名必須 - セキュリティを保ちながら、プロファイルも動作する
これで claude.ps1 も実行できるようになり、エラーは解消します。
ただし、組織PCや業務環境ではセキュリティポリシーに抵触する可能性がありますので注意してください。
まとめ
- 原因:PowerShell が
.ps1を優先 → 実行ポリシーでブロックされる - 解決法:
- 手軽に試すなら →
claude.cmdを明示 - 快適に使うなら → エイリアスで
.cmdを優先 - ポリシー緩和も可能だが → セキュリティに注意
- 手軽に試すなら →
参考リンク(公式ドキュメント)
- Microsoft Learn – about_Execution_Policies
https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_Execution_Policies - Microsoft Learn – about_Command_Precedence
https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_Command_Precedence - npm Docs – npm bin
https://docs.npmjs.com/cli/v10/commands/npm-bin
コメント