【PowerShell】スクリプトの実行が無効でコマンドが実行できない場合の対処法

【PowerShell】スクリプトの実行が無効でコマンドが実行できない場合の対処法

記事の文字数:1965

WindowsのPowerShellでnpm等のコマンドを実行しようとした場合に、スクリプトの実行が無効になっている旨のエラーが出た際の対処方法を紹介します。デフォルトではスクリプトの実行が許可されていません。実行ポリシーの種類と変更する手順を紹介します。


スポンサーリンク

WindowsのPowerShellでコマンドを実行しようとした場合に、スクリプトの実行が無効になっている旨のエラーが出た際の対処方法を紹介します。

スクリプトの実行が無効になっている

PowerShellから以下コマンドを実行しようとしたら、以下エラーが発生した。(※以下はnpmコマンドの例)

実行コマンド
npm -v
実行結果例
PS C:\windows\system32> npm -v
npm : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Program Files\nodejs\npm.ps1 を読み込むことが
できません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してくだ
さい。
発生場所 行:1 文字:1
+ npm -v
+ ~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess

原因

Windowsの初期設定ではPowerShellのスクリプト実行が、実行ポリシーによって許可されていないため。

対応方法

PowerShellを管理者権限で開きPowerShell Set-ExecutionPolicy RemoteSignedで、実行ポリシーを変更することで解決する。

PowerShellの実行ポリシーについて

PowerShellの実行ポリシーは、スクリプトの実行をどのように許可・制限するかを定義するもので、PowerShellがどのスクリプトを実行可能か、どのスクリプトが禁止されるかを制御します。
実行ポリシーを設定することで、スクリプトの安全性を高める役割があります。

各ポリシーの違い

主な実行ポリシーの種類は以下のとおりです。

#実行ポリシー説明
1.Restrictedすべてのスクリプトの実行が許可されない
2.AllSigned署名のあるスクリプトのみ実行可能
3.RemoteSignedローカルで作成したスクリプトと
インターネットからDLしたスクリプト(署名有)が実行可能
4.Unrestrictedすべてのスクリプトが実行可能だが、
インターネットからダウンロードしたスクリプトを実行する際は警告を表示
5.Bypassすべてのスクリプトが実行可能

1. Restricted

  • デフォルトの設定。
  • スクリプトの実行が一切許可されない。
  • インタラクティブなコマンドの実行のみが可能で、スクリプトの利用が制限。

2. AllSigned

  • 実行するスクリプトはすべて信頼された発行元によって署名されている必要がある。
  • 信頼された証明書を使用したスクリプトのみ実行可能で、安全性が高い反面、管理が複雑。
  • 内部的な開発や配布では使いにくい。

3. RemoteSigned

  • ローカルで作成されたスクリプトは署名なしで実行できるが、インターネットからダウンロードしたスクリプトには署名が必要。
  • インターネット経由で入手したスクリプトのセキュリティが確保されるため、比較的安全かつ柔軟な設定。

4. Unrestricted

  • すべてのスクリプトが署名なしで実行できるが、インターネットからダウンロードしたスクリプトを実行する際には警告が表示される。
  • 開発環境や内部システムでの利用には向いているが、リスクも伴う。

5. Bypass

  • 実行ポリシーのチェックを一切行わず、スクリプトの実行が完全に許可される。
  • 自動化スクリプトやバックグラウンドでのプロセス実行に利用されることがあるが、セキュリティ的には非常にリスクが高い。

実行ポリシーの選定

3. RemoteSignedが最も柔軟で、セキュリティ的に安全な設定のため、こちらの設定を採用します。

対応方法の詳細

前提

  • Windows環境でPowerShellを管理者権限で起動していること。

※PowerShellはWindowsキーを押下し、powershellで検索し、 「Windows PowerShell>管理者として実行する」から起動してください。

alt text

ポリシー確認コマンド(変更前)

PowerShellから以下コマンドを実行します。

実行コマンド
PowerShell Get-ExecutionPolicy

実行結果例(変更前)

以下の通り、初期設定ではRestrictedの実行ポリシーとなっています。

Terminal window
PS C:\windows\system32> PowerShell Get-ExecutionPolicy
Restricted

ポリシー変更コマンド

以下コマンドでポリシーをRemoteSignedへ変更します。

Terminal window
PowerShell Set-ExecutionPolicy RemoteSigned

※実行には管理者権限が必要です。

ポリシー確認コマンド(変更後)

再度ポリシー確認コマンドを実行します。

Terminal window
PowerShell Get-ExecutionPolicy

実行結果例(変更後)

ポリシーがRemoteSignedとなったことを確認できました。

Terminal window
PS C:\windows\system32> PowerShell Get-ExecutionPolicy
RemoteSigned

実行ポリシー変更後の実行確認

以下の通り、PowerShellからコマンドが実行できたことを確認しました。

実行コマンド
npm -v
実行結果例
PS C:\windows\system32> npm -v
10.9.0

エラーが発生した場合は…

以下のようなエラーが発生した場合は、Powershellを管理者ユーザで起動していないことが考えられます。

実行時エラー
PS C:\Users\xxxxx> PowerShell Set-ExecutionPolicy RemoteSigned
Set-ExecutionPolicy : レジストリ キー 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
' へのアクセスが拒否されました。 既定 (LocalMachine) のスコープの実行ポリシーを変更するには、[管理者として実行] オプシ
ョンを使用して Windows PowerShell を起動してください。現在のユーザーの実行ポリシーを変更するには、"Set-ExecutionPolicy
-Scope CurrentUser" を実行してください。
発生場所 行:1 文字:1
+ Set-ExecutionPolicy RemoteSigned
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetExecutionPolicyComma
nd

PowerShellを管理者ユーザで起動しなおして、再度コマンドを実行してみてください。


以上で本記事の解説を終わります。
よいITライフを!
スポンサーリンク
Scroll to Top