
スポンサーリンク
WindowsのPowerShellでコマンドを実行しようとした場合に、スクリプトの実行が無効になっている旨のエラーが出た際の対処方法を紹介します。
スクリプトの実行が無効になっている
PowerShellから以下コマンドを実行しようとしたら、以下エラーが発生した。(※以下はnpmコマンドの例)
npm -v
PS C:\windows\system32> npm -vnpm : このシステムではスクリプトの実行が無効になっているため、ファイル 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>管理者として実行する」から起動してください。
ポリシー確認コマンド(変更前)
PowerShellから以下コマンドを実行します。
PowerShell Get-ExecutionPolicy
実行結果例(変更前)
以下の通り、初期設定ではRestricted
の実行ポリシーとなっています。
PS C:\windows\system32> PowerShell Get-ExecutionPolicyRestricted
ポリシー変更コマンド
以下コマンドでポリシーをRemoteSigned
へ変更します。
PowerShell Set-ExecutionPolicy RemoteSigned
※実行には管理者権限が必要です。
ポリシー確認コマンド(変更後)
再度ポリシー確認コマンドを実行します。
PowerShell Get-ExecutionPolicy
実行結果例(変更後)
ポリシーがRemoteSigned
となったことを確認できました。
PS C:\windows\system32> PowerShell Get-ExecutionPolicyRemoteSigned
実行ポリシー変更後の実行確認
以下の通り、PowerShellからコマンドが実行できたことを確認しました。
npm -v
PS C:\windows\system32> npm -v10.9.0
エラーが発生した場合は…
以下のようなエラーが発生した場合は、Powershellを管理者ユーザで起動していないことが考えられます。
PS C:\Users\xxxxx> PowerShell Set-ExecutionPolicy RemoteSignedSet-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ライフを!