WindowsでPowerShellスクリプトを実行しようとしたときに「このシステムではスクリプトの実行が無効になっているため、ファイルXXXを読み込むことができません。」と言われて、スクリプトが実行できないことがあります。
これは 実行ポリシー(Execution Policy) が原因です。PowerShellはセキュリティのため、既定ではスクリプトの実行を制限しています。
この制御を行うのが Set-ExecutionPolicy
コマンドです。
Set-ExecutionPolicyとは?
Set-ExecutionPolicy
は PowerShellでスクリプトの実行ポリシーを変更するコマンド です。 ポリシーの種類やスコープによって、どの程度スクリプトを許可するかを柔軟に設定できます。
実行ポリシーの種類
代表的なポリシーを表にまとめました。
ポリシー | 説明 |
---|---|
Restricted | スクリプトは一切実行不可。対話式の入力だけ。 |
AllSigned | すべてのスクリプトに署名が必要。セキュリティは高い。 |
RemoteSigned | ローカル作成スクリプトはOK。ネットからダウンロードしたものは署名が必要。 |
Unrestricted | 署名不要で実行可。ダウンロードスクリプトは警告が出る。 |
Bypass | 完全に無制限。警告もブロックもなし。 |
Undefined | 設定を解除し、上位スコープのポリシーが適用される。 |
スコープ(適用範囲と永続化)
スコープによって、ポリシーが「どこに効くか」を指定できます。ここでポイントになるのが「永続化されるかどうか」です。
スコープ | 適用範囲 | 永続化 |
---|---|---|
Process | 現在のPowerShellウィンドウだけ | 一時的(終了するとリセット) |
CurrentUser | 今のユーザーだけ | 永続化(レジストリ HKCU に保存) |
LocalMachine | PC全体(全ユーザー対象) | 永続化(レジストリ HKLM に保存) |
よく使うコマンド
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
# 一時的に制限を解除(閉じたら元に戻る)
Set-ExecutionPolicy Bypass -Scope Process
# 設定状況を確認
Get-ExecutionPolicy -List
注意点
- 企業PCでは グループポリシー により上書きされている場合があり、その場合は変更できません。
- Unrestricted や Bypass は便利ですがセキュリティリスクが大きいため、必要なときに一時的に使う程度がおすすめです。
まとめ
Set-ExecutionPolicy
でPowerShellのスクリプト実行をコントロールできる- RemoteSigned -Scope CurrentUser は永続化されるので開発や学習に便利
- Bypass -Scope Process は一時的に使いたいときにおすすめ
これで「スクリプトが実行できない!」というエラーともおさらばできます。 覚えるのは大変ですが永続化できる設定の場合は、一度実行すれば良いだけとなります。