【初心者向け】PowerShellの「実行ポリシー」とは?|現在の設定を確認・変更する方法も解説

Windows

PowerShellでスクリプトを実行しようとしたとき、いきなり次のようなエラーに出くわしたことはありませんか?

「スクリプトの実行が無効になっているため、ファイルを読み込めません。」

このエラーの原因は、「実行ポリシー(Execution Policy)」にあります。

実行ポリシーとは、スクリプトの実行を制限するセキュリティ設定で、PowerShellではこれが非常に重要な役割を果たします。

本記事では、現在の実行ポリシーの確認方法を中心に、基本知識、ポリシーの種類、変更方法、注意点まで初心者にもわかりやすく解説します。

スポンサーリンク

PowerShellの実行ポリシーとは?

実行ポリシーは、PowerShellが「どのようなスクリプトを許可するか」を制御する設定です。

セキュリティを保つために、既定ではスクリプト実行が制限されています。

マイクロソフトがこの仕組みを導入した理由は、悪意のあるスクリプトからユーザーを保護するためです。

実行ポリシーはファイアウォールのような役割を果たし、信頼できないスクリプトの実行を防ぎます。

実行ポリシーの種類一覧

ポリシー名内容使用シーン
Restrictedすべてのスクリプトをブロック(既定)高セキュリティ環境、スクリプト不要の環境
AllSignedすべてのスクリプトに署名が必要企業環境、高セキュリティ要件
RemoteSignedインターネットから取得したスクリプトに署名が必要一般的な業務環境(推奨)
Unrestrictedすべてのスクリプトを実行可能(初回のみ警告表示)開発環境、テスト環境
Bypass完全に無制限。警告も表示されない自動化環境、CI/CD

各ポリシーの詳細

Restricted

最も制限が厳しいポリシーです。

PowerShellコマンドは使用できますが、スクリプトファイル(.ps1)の実行はブロックされます。
多くのWindows環境では、これが既定値となっています。

AllSigned

信頼された発行元によって電子署名されたスクリプトのみを実行できます。
署名のないスクリプトや、信頼されていない発行元からのスクリプトは実行できません。

RemoteSigned

ローカルで作成したスクリプトは署名なしで実行できますが、インターネットからダウンロードしたスクリプトには信頼された署名が必要です。

バランスの取れた設定。

Unrestricted

すべてのスクリプトを実行できますが、インターネットからダウンロードしたスクリプトを実行する際は警告が表示されます。

Bypass

すべての制限をバイパスし、警告も表示されません。
自動化プロセスやCI/CD環境で使用されますが、セキュリティリスクが高いため通常の使用は推奨されません。

現在の実行ポリシーを確認する方法

単純に現在の設定を確認するには?

Get-ExecutionPolicy

このコマンドは、現在有効な(最も制限の厳しい)実行ポリシーを表示します。

各スコープ(ユーザー別など)のポリシーをすべて確認したいときは?

Get-ExecutionPolicy -List

出力例:

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

→ 実際にどのスコープが優先されているかがひと目でわかります。

実行ポリシーのスコープについて

PowerShellの実行ポリシーは、異なるスコープ(範囲)で設定できます:

スコープ説明優先度
MachinePolicyグループポリシーでコンピューター全体に設定最高
UserPolicyグループポリシーでユーザーに設定2番目
Process現在のPowerShellセッションのみ3番目
CurrentUser現在のユーザーのみ4番目
LocalMachineコンピューター上のすべてのユーザー最低

優先度の高いスコープでの設定が、低いスコープの設定よりも優先されます。

例えば、MachinePolicyが「Restricted」で、CurrentUserが「RemoteSigned」の場合、実際の動作は「Restricted」になります。

実行ポリシーを変更する方法

例:現在のユーザーのみRemoteSignedに設定

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

例:一時的(プロセス単位)に変更

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

例:コンピューター全体の設定を変更(管理者権限必要)

Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy RemoteSigned

⚠ 注意!

  • 管理者権限が必要なスコープ(例:LocalMachine)もあります。
  • セキュリティリスクがあるため、UnrestrictedやBypassは慎重に使うようにしましょう。
  • グループポリシーで設定された実行ポリシー(MachinePolicy, UserPolicy)は、Set-ExecutionPolicyで変更できません。

よくあるエラーと対処法

エラー:「実行ポリシーによりスクリプトの実行が無効になっています」

.\myscript.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル
C:\Scripts\myscript.ps1 を読み込めません。詳細については、「Get-Help about_Signing」を参照してください。

対処法:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

エラー:「アクセスが拒否されました」

Set-ExecutionPolicy : レジストリ キー 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' へのアクセスが拒否されました。

対処法:

  • 管理者としてPowerShellを実行して再試行
  • 管理者権限がない場合は、-Scope CurrentUser を使用する

スクリプトを1回だけ実行したい場合

powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\myscript.ps1"

このコマンドは、実行ポリシーを変更せずに、特定のスクリプトを1回だけバイパスして実行します。

実行ポリシーの活用シーン

スクリプトを使った業務自動化

# 日々の業務で使用する自作スクリプトを実行する場合
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

RemoteSignedを使えば、自分で作成したスクリプトは問題なく実行でき、外部から取得したスクリプトには署名が求められるため、バランスが良いです。

外部スクリプト(GitHubなど)の実行

GitHubなどからダウンロードしたスクリプトは、インターネットからの取得とみなされます。

これを実行するには:

  1. RemoteSignedポリシーの場合:署名が必要
  2. 代替手段として:ファイルのプロパティで「ブロックの解除」を行う
  3. または:一時的にポリシーを緩和する
# プロセス単位で一時的に緩和
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

社内ポリシーに応じたセキュリティ管理

企業環境では、グループポリシーを使って実行ポリシーを一元管理することが一般的です:

# 管理者としてグループポリシーエディタを開く
gpedit.msc

# ナビゲーション: コンピューターの構成 > 管理用テンプレート > Windows コンポーネント > Windows PowerShell

CI/CD環境での一時的なスクリプト実行

自動化パイプラインでは、コマンドラインから一時的にポリシーをバイパスする方法がよく使われます:

# CI/CDパイプラインでの使用例
powershell.exe -ExecutionPolicy Bypass -Command "& {./deploy-script.ps1}"

まとめ

PowerShellの実行ポリシーは、セキュリティと利便性のバランスを取るための仕組みです。

まずは、今の自分の環境がどうなっているかを「Get-ExecutionPolicy」で確認するところから始めましょう。

本記事のポイント:

  • Get-ExecutionPolicyで現在の実行ポリシーを確認
  • -Listでスコープごとの設定もチェックできる
  • Set-ExecutionPolicyで必要に応じて変更可能(慎重に!)
  • 一般的にはRemoteSignedが推奨されるバランスの取れた設定
  • 一時的な実行には-ExecutionPolicy Bypassオプションも活用できる
  • 実行ポリシーの理解はスクリプト実行の第一歩

実行ポリシーは、PowerShellを安全に使いこなすための重要な知識です。

セキュリティと使いやすさのバランスを考慮し、自分の環境に最適な設定を選びましょう。

コメント

タイトルとURLをコピーしました