PowerShellでファイルを実行ができなかったことはありませんか?
PowerShellは、悪意のあるスクリプトの実行を防ぐためにExecutionPolicy(実行ポリシー)を設定しています。Windowsの初期設定では、PowerShellの実行ポリシーにより、スクリプトの実行が許可されていません。
この記事では、PowerShellの実行ポリシーの種類とスコープについてまとめました。また実行ポリシーの確認・変更方法についても解説します。
PowerShellのExecutionPolicyとは?
ExecutionPolicy(実行ポリシー)は、WindowsのPowerShellでスクリプトの実行を制御するセキュリティ機能の一つです。
PowerShellは、悪意のあるスクリプトの実行を防ぐために、デフォルトでスクリプトの実行を制限するポリシーに設定されています。不正なスクリプトの実行を防ぎ、システムの安全性を向上させることができます。
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