PowerShell でスクリプトを実行しようとすると
「このシステムではスクリプトは実行できません」
といった権限エラーが出ることがあります。
原因は ExecutionPolicy(実行ポリシー) の設定にあります。
この記事では、
-
Get-ExecutionPolicy -List
で確認できる各項目の意味 -
設定できる ExecutionPolicy の種類
-
初心者でも安全にスクリプトを実行するための方法
を解説します。
Get-ExecutionPolicy -List で分かること
Get-ExecutionPolicy -List
を実行すると、スコープごとの設定が一覧表示されます。
各スコープの意味
-
MachinePolicy
グループポリシーでコンピュータ全体に適用される設定。通常の環境では Undefined が多い。 -
UserPolicy
グループポリシーでユーザー単位に適用される設定。これも Undefined が一般的。 -
Process
現在の PowerShell プロセス(セッション)だけに適用される一時設定。
終了するとリセットされる。 -
CurrentUser
現在ログインしているユーザーだけに適用される設定。
管理者権限なしで変更可能なので、初心者はここを設定するのが安全。 -
LocalMachine
コンピュータ全体に適用される設定。管理者権限が必要。
ExecutionPolicy の種類
設定できる実行ポリシーには以下の種類があります。
Policy | 概要 | 署名の要否 | 典型用途 | リスク度(1-5) | 推奨スコープ | 設定例(Set-ExecutionPolicy) | 補足 |
---|---|---|---|---|---|---|---|
Restricted | スクリプト実行を全て禁止 | 不要(そもそも実行不可) | 企業の厳格端末/検証用の完全遮断 | 2 | LocalMachine | Set-ExecutionPolicy Restricted -Scope LocalMachine | 既定値になりがち。学習/自動化には不向き |
AllSigned | 信頼された発行元の署名付きのみ実行可 | 必須(すべて) | 厳格な本番環境での運用 | 3 | LocalMachine または CurrentUser | Set-ExecutionPolicy AllSigned -Scope CurrentUser | 署名管理が前提。外部スクリプトの安全性担保 |
RemoteSigned | ローカル作成は実行可/インターネット由来は署名必須 | リモート(ダウンロード物)のみ必須 | 一般的な開発/運用でのバランス設定 | 2 | CurrentUser(推奨) | Set-ExecutionPolicy RemoteSigned -Scope CurrentUser | 最も無難。管理者権限不要でユーザー単位に適用 |
Unrestricted | 全て実行可(初回に警告が出る場合あり) | 不要 | 検証/一時的な作業で制限を緩めたい時 | 4 | Process または CurrentUser | Set-ExecutionPolicy Unrestricted -Scope Process | 恒常運用は非推奨。警告は出るが実行は可能 |
Bypass | ブロック/警告なしで全て実行 | 不要 | 自動化ジョブ/一時的に完全無視したい時 | 5 | Process(強く推奨) | Set-ExecutionPolicy Bypass -Scope Process | セッション限定で使う。恒常設定は危険 |
Undefined | スコープに設定なし(上位スコープへ委譲) | — | ポリシー未設定状態の表示 | 1 | — | — | 全スコープUndefinedの場合は実質Restrictedが有効になることが多い |
安全に設定する方法
権限エラーを解決するには、スコープを指定して設定します。
現在のユーザーだけに設定する場合(推奨)
-
管理者権限が不要
-
他のユーザーやシステム全体には影響しない
-
ローカルで作ったスクリプトは実行可能
一時的に設定する場合(PowerShellを閉じるとリセット)
まとめ
-
ExecutionPolicy が原因で PowerShell スクリプトが実行できないことがある
-
Get-ExecutionPolicy -List
でどのスコープに設定があるかを確認できる -
初心者は CurrentUser に RemoteSigned を設定するのが安全
-
目的に応じて、Process(一時的)や LocalMachine(管理者権限が必要)も使える