PowerShellのExecutionPolicyの確認・変更方法

仕事
記事内に広告・商品プロモーションを含む場合がございます
スポンサーリンク

PowerShellでファイルを実行ができなかったことはありませんか?

PowerShellは、悪意のあるスクリプトの実行を防ぐためにExecutionPolicy(実行ポリシー)を設定しています。Windowsの初期設定では、PowerShellの実行ポリシーにより、スクリプトの実行が許可されていません。

この記事では、PowerShellの実行ポリシーの種類とスコープについてまとめました。また実行ポリシーの確認・変更方法についても解説します。

この記事でわかること
  • PowerShellのExecutionPolicy(実行ポリシー)とは?
  • ExecutionPolicy(実行ポリシー)の確認・変更方法

PowerShellのExecutionPolicyとは?

ExecutionPolicy(実行ポリシー)は、WindowsのPowerShellでスクリプトの実行を制御するセキュリティ機能の一つです。

PowerShellは、悪意のあるスクリプトの実行を防ぐために、デフォルトでスクリプトの実行を制限するポリシーに設定されています。不正なスクリプトの実行を防ぎ、システムの安全性を向上させることができます。

ExecutionPolicyの目的

ExecutionPolicy(実行ポリシー)は、以下のような目的で使用されます。

  • マルウェアや不正なスクリプトの実行を防ぐ
  • 組織内やローカル環境の実行ポリシーを適切に管理する
  • 予期しないスクリプト実行を防ぐ

実行ポリシーの種類

実行ポリシーには以下のポリシーがあり、それぞれ異なるレベルのセキュリティでスクリプトの実行を制御しています。

実行ポリシースクリプトの制限インターネットスクリプト推奨環境
Restrictedすべて禁止(デフォルト設定)実行不可組織などの厳格なセキュリティ環境
AllSigned署名付きのみ実行可能実行不可高セキュリティ環境
RemoteSignedローカルは実行可能、ダウンロードは署名付きのみ実行可能実行不可開発環境・個人利用
Unrestrictedすべて実行可能(警告あり)確認ダイアログテスト環境・制限なしで作業する場合
Bypassすべて実行可能(警告なし)実行可自動化・スクリプト実行環境(非推奨)
Undefinedポリシー未定義(上位スコープのポリシーが適用される)

実行ポリシーの確認方法(Get-ExecutionPolicy)

PowerShellセッションの有効なExectuionPolicy(実行ポリシー)を確認するには、Get-ExecutionPolicyコマンドを使用します。

$ Get-ExecutionPolicy
AllSigned

Listオプションを使用することで、すべてのスコープの実行ポリシーを優先順位の順に表示できます。

$ Get-ExecutionPolicy -List

         Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       AllSigned
 LocalMachine    RemoteSigned

実行ポリシーの変更方法(Set-ExecutionPolicy)

ExecutionPolicy(実行ポリシー)を変更するには、Set-ExecutionPolicyコマンドを使用します。Scopeオプションを使用して、実行ポリシーのスコープ(適用範囲)を指定することができます。

Scopeオプションを指定しない場合、デフォルトでLocalMachineスコープが適用されます。

# 現在のPowerShellセッションのポリシー変更
$ Set-ExecutionPolicy RemoteSigned -Scope Process

# 現在のユーザーのポリシー変更
$ Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

# PCの全ユーザーのポリシー変更(管理者権限で実行が必要)
$ Set-ExecutionPolicy RemoteSigned

スコープの種類

以下のスコープ(適用範囲)があり、スコープごとに実行ポリシーを設定することができます。

スコープ影響範囲特徴優先度
MachinePolicy全ユーザー(グループポリシー)グループポリシー管理者が設定。ユーザーは変更不可。最高
UserPolicy現在のユーザー(グループポリシー)グループポリシー管理者が設定。ユーザー単位の設定。
Process現在のPowerShellセッション一時的な設定であり、セッションを閉じると元の設定に戻る、
CurrentUser現在のユーザー他ユーザーへの影響がなく、管理者権限なしで変更可能。
LocalMachine全ユーザー(PC全体)デフォルトのスコープ。管理者権限で変更可能。最低

優先順位が高いスコープに適用されている実行ポリシーが、現在のPowerShellの実行ポリシーとして適用されます。

$ Get-ExecutionPolicy -List

         Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       AllSigned
 LocalMachine    RemoteSigned
 
$ Get-ExecutionPolicy
AllSigned

優先度の関係で、このPowerShellの実行ポリシーはAllSignedが適用されるよ。

適切な実行ポリシーとは?

さて、ここまで読んで、こんな疑問が浮かんでくると思います。

結局のところ、実行ポリシーは何を設定すればいいの?

適切な実行ポリシーの選び方をご紹介します。

実行ポリシーの設定は、用途に応じてセキュリティと利便性のバランスを考えることが重要です。

用途・環境推奨ポリシー理由
セキュリティ重視(企業)AllSigned署名付きスクリプトのみ実行可能、改ざん防止
開発環境・個人
PC(安全性を考慮)
RemoteSignedローカルスクリプトは実行可能、ダウンロードスクリプトは署名必須
開発・検証(一時的に制限を緩和)Unrestrictedすべてのスクリプトが実行可能、インターネットスクリプトは警告あり
CI/CD・バッヂ処理(自動実行)Bypassすべてのスクリプトを警告なしで実行(リスク大)
実行禁止Restrictedすべてのスクリプトをブロック
おすすめの実行ポリシー

個人PCであれば、RemoteSignedがおすすめ!

ローカルのスクリプトが実行可能であり、ダウンロードしたスクリプトは署名が必要なため、セキュリティを確保できます。

  • 企業環境は、AllSigned
  • 開発環境や個人PCは、RemoteSigned

おわりに

この記事では、PowerShellの実行ポリシーの種類とスコープについてまとめて、実行ポリシーの確認・変更方法について解説しました。

まとめ

ExecutionPolicy(実行ポリシー)とは、PowerShellのスクリプト実行を制御するためのセキュリティ機能です。デフォルト設定ではRestrictedのため、スクリプト実行はできません。

実行ポリシーの確認・変更方法は次のコマンドです。

  • Get-ExecutionPolicy
  • Set-ExecutionPolicy

セキュリティと利便性のバランスを考慮し、適切なポリシーを設定しましょう。迷ったらRemoteSignedがおすすめ!

  • 企業環境は、AllSigned
  • 開発環境や個人PCは、RemoteSigned