WindowsでPowerShellスクリプトを実行しようとしたときに「このシステムではスクリプトの実行が無効になっているため、ファイルXXXを読み込むことができません。」と言われて、スクリプトが実行できないことがあります。

これは 実行ポリシー(Execution Policy) が原因です。PowerShellはセキュリティのため、既定ではスクリプトの実行を制限しています。

この制御を行うのが Set-ExecutionPolicy コマンドです。

Set-ExecutionPolicyとは?

Set-ExecutionPolicyPowerShellでスクリプトの実行ポリシーを変更するコマンド です。 ポリシーの種類やスコープによって、どの程度スクリプトを許可するかを柔軟に設定できます。

実行ポリシーの種類

代表的なポリシーを表にまとめました。

ポリシー 説明
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では グループポリシー により上書きされている場合があり、その場合は変更できません。
  • UnrestrictedBypass は便利ですがセキュリティリスクが大きいため、必要なときに一時的に使う程度がおすすめです。

まとめ

  • Set-ExecutionPolicy でPowerShellのスクリプト実行をコントロールできる
  • RemoteSigned -Scope CurrentUser は永続化されるので開発や学習に便利
  • Bypass -Scope Process は一時的に使いたいときにおすすめ

これで「スクリプトが実行できない!」というエラーともおさらばできます。 覚えるのは大変ですが永続化できる設定の場合は、一度実行すれば良いだけとなります。