PowerShellでスクリプトを実行しようとしたら、こんなエラーが出て止まってしまったことないですか?
「え、なんで動かないの……」となるやつですよね。これ、PowerShellの実行ポリシーという仕組みが原因です。
初めて見ると少し面食らいますが、仕組みを理解してしまえばサクッと解決できます。この記事ではエラーの原因から安全な設定方法まで順を追って解説します。
この記事でわかること
- 実行ポリシーとは何か、なぜ制限されているのか。
- Restricted / RemoteSigned / Unrestricted など各ポリシーの違い。
- 現在の設定を確認する
Get-ExecutionPolicyの使い方。 Set-ExecutionPolicyでポリシーを変更する方法。- スコープ(CurrentUser / LocalMachine)の使い分け。
- 「スクリプトの実行が無効になっているため~」エラーの解決方法。
- 個人PC・業務PCそれぞれの推奨設定。
PowerShellの実行ポリシーとは?
なぜスクリプトの実行が制限されているのか
実行ポリシーとはPowerShellがスクリプト(.ps1ファイル)を実行するときのルールを定める仕組みです。
Windowsではデフォルトでスクリプトの実行が制限されています。悪意のあるスクリプトが意図せず実行されてしまうのを防ぐためのセキュリティ上の配慮ですね。
「ps1ファイルを実行したい」という場面でこの制限に引っかかるわけです。
補足 実行ポリシーはあくまでも「うっかり実行してしまう」のを防ぐ仕組みです。悪意のある攻撃者を完全に防ぐセキュリティ機能ではない点はMicrosoft公式でも明記されています。
実行ポリシーの種類と意味
ポリシーには以下の種類があります。
| ポリシー名 | 動作概要 |
|---|---|
| Restricted | すべてのスクリプトの実行をブロック。PowerShellのデフォルト設定。 |
| AllSigned | 信頼された発行元によって署名されたスクリプトのみ実行可能(ローカルスクリプトも署名必須)。 |
| RemoteSigned | ローカルスクリプトは実行可能。インターネットから取得したスクリプトは署名が必要。 |
| Unrestricted | すべてのスクリプトを実行可能。ただしインターネット由来のスクリプトには警告が表示される。 |
| Bypass | 制限なし・警告なしでスクリプトを実行可能。主に自動化やCI/CD用途。セキュリティリスクが高いため通常利用では非推奨。 |
| Undefined | ポリシー未設定。上位スコープ(Machine/Userなど)の設定が適用される。 |
日常的な用途ではRemoteSignedが使い勝手とセキュリティのバランスがよく、推奨されることが多いです。
実行ポリシー比較
重要なポリシーのRestricted / RemoteSigned / Unrestrictedの違いをより詳しくまとめると下記のとおりです。
| 項目 | Restricted | RemoteSigned | Unrestricted |
|---|---|---|---|
| スクリプト実行 | ❌ 不可 | ⭕ 可 | ⭕ 可 |
| ローカルスクリプト | ❌ 実行不可 | ⭕ 実行可 | ⭕ 実行可 |
| ダウンロードスクリプト | ❌ 実行不可 | ⭕ 署名が必要 | ⭕ 実行可(警告あり) |
| セキュリティレベル | 🔒 最も高い | 🔒 中 | ⚠️ 低 |
| 初心者おすすめ度 | △(厳しすぎる) | ◎(最もバランス良い) | △(リスクあり) |
| 主な用途 | 制限された環境 | 開発・通常利用 | テスト・検証 |
迷ったらセキュリティと利便性のバランスが良く、Microsoftも一般用途で推奨寄りなRemoteSignedを選ぶのが良いと思います。
実行ポリシーのセキュリティリスク
PowerShellの実行ポリシーはセキュリティ機能の一部ですが完全な防御ではありません。
設定によっては悪意のあるスクリプトが実行されるリスクがあります。
なぜ危険なのか
- スクリプトはファイル操作・レジストリ操作・ネットワーク通信が可能。
- マルウェアがPowerShellを利用するケースがある。
- 実行ポリシーはユーザーの誤操作で簡単に変更できる。
特に注意すべきポリシー
- Bypass
→ 制限も警告もなし(最も危険) - Unrestricted
→ 実行できてしまう(警告だけでは防げない)
よくあるリスクパターン
- ネットからDLしたスクリプトをそのまま実行する。
- 実行ポリシーを一時的に緩めて戻し忘れる。
- 意味を理解せず
Set-ExecutionPolicyを実行。
実行ポリシーは“セキュリティ機能ではない”
PowerShellの実行ポリシーは、厳密にはセキュリティ機能ではなくユーザーの誤操作を防ぐための安全装置です。
そのため、以下のような特徴があります。
- 強制力は弱い(回避可能)
- 管理者権限があれば変更できる
- マルウェア対策としては不十分
つまり実行ポリシーだけで安全になるわけではないです。
実行ポリシーの変更は用途に応じて方法を使い分けることが重要です
- 検証環境
→Processスコープで一時的に変更する。(PowerShell終了で自動的に元に戻る) - CI/CDや自動化
→実行時オプションでBypassを指定して実行する。(設定自体は変更しない)
現在の実行ポリシーを確認する方法
Get-ExecutionPolicyの使い方
現在の実行ポリシーはGet-ExecutionPolicyで確認できます。
Get-ExecutionPolicy実行すると現在のポリシー名が1行で返ってきます。
Restrictedこの場合はスクリプトの実行がブロックされている状態です。
スコープ別に確認する方法
実行ポリシーにはスコープ(適用範囲)という概念があります。スコープごとに異なるポリシーを設定でき、優先度の高いスコープが優先して適用されます。
-Listオプションを使うと全スコープの設定を一覧で確認できます。
Get-ExecutionPolicy -List Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser RemoteSigned
LocalMachine Restricted上から順に優先度が高く、最初に値が設定されているスコープのポリシーが適用されます。この例ではCurrentUserにRemoteSignedが設定されているため、現在の実行ポリシーはRemoteSignedと判断できるわけですね。
なおMachinePolicyとUserPolicyはグループポリシーから設定されるスコープです。ここに値が入っている場合、個人での変更は上書きされてしまいます。業務PCで変更が反映されないときは要チェックです。
実行ポリシーを変更する方法
Set-ExecutionPolicyの基本的な使い方
ポリシーを変更するにはSet-ExecutionPolicyを使います。
Set-ExecutionPolicy <ポリシー名> -Scope <スコープ>例:CurrentUserをRemoteSignedに変更する場合
Set-ExecutionPolicy RemoteSigned -Scope CurrentUserスコープ(CurrentUser / LocalMachine)の違いと使い分け
-Scopeオプションでどの範囲にポリシーを適用するか指定できます。-Scopeを省略した場合はLocalMachine扱いになります。
| スコープ名 | 適用範囲 | 管理者権限 |
|---|---|---|
| LocalMachine | そのPCにログインするすべてのユーザー | 必要 |
| CurrentUser | 現在ログインしているユーザーのみ | 不要 |
| Process | 現在起動中のPowerShellセッションのみ | 不要 |
自分のPC環境でスクリプトを動かしたいだけならCurrentUserでよいと思います。
管理者権限が必要なケースとは
LocalMachineスコープへの変更は管理者権限が必要です。一般ユーザーで実行すると以下のエラーが出ます。
Set-ExecutionPolicy: Access to the path 'C:\Program Files\PowerShell\7\powershell.config.json' is denied.
To change the execution policy for the default (LocalMachine) scope, start PowerShell with the "Run as administrator" option.
To change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".この場合はPowerShellを管理者として実行してから再度コマンドを試してみてください。
⚠️ 注意
LocalMachineの設定はPC全体に影響します。業務環境では変更前にIT管理者への確認をおすすめします。
なお、PowerShellをどのフォルダーで開くか迷ったときは以下の記事も参考にしてみてください。作業対象フォルダーで直接起動する3つの方法を紹介しています。

よくあるエラーと対処法
「このシステムではスクリプトの実行が無効になっているため~」
このエラーは実行ポリシーがRestrictedになっているときに発生します。自分のPC環境であれば以下の手順で解決できます。
Get-ExecutionPolicy -List Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RestrictedSet-ExecutionPolicy RemoteSigned -Scope CurrentUserGet-ExecutionPolicyRemoteSignedRemoteSignedと表示されれば設定完了です。スクリプトを再実行してみてください。
これでPowerShellの実行ポリシーによるエラーは解決できます。実務ではここからスクリプトを活用していくことが重要です。PowerShellを使った自動化や定期実行については以下の記事で詳しく解説しています。

変更しても反映されない場合
設定を変更したはずなのに反映されないことがあります。よくある原因は以下のとおりです。
- グループポリシーで上書きされている
MachinePolicyやUserPolicyスコープに管理者が設定を入れていると個人設定より優先されます。社用PCでは特に多いパターンです。 - スコープが噛み合っていない
LocalMachineを変えたつもりがCurrentUser側が優先されているケースもあります。Get-ExecutionPolicy -Listで全スコープを確認してみてください。 - PowerShellのバージョンが異なる
Windows PowerShell(5.1)とPowerShell 7系は独立した実行ポリシーを持っています。どちらで設定・実行しているか確認してみてください。
現在使っているPowerShellのバージョンは以下のコマンドで確認できます。
$PSVersionTableName Value
---- -----
PSVersion 7.4.2
PSEdition Core
...PSVersionが5.xであればWindows PowerShell、7.xであればPowerShell 7です。両方インストールしている場合はそれぞれで実行ポリシーを設定する必要があります。
PowerShellはパッケージ管理にも活用できます。Windowsでソフトを一括インストールする方法はこちら。

セキュリティ的に安全な推奨設定
個人PCの場合
自宅など自分だけが使うPCであれば以下の設定が使いやすいです。
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser- ローカルで自作したスクリプトはそのまま実行できます。
- ネットからダウンロードしたスクリプトには署名チェックが入るので最低限の安全性は保てます。
- 管理者権限なしで設定できるのも手軽なポイントですね。
業務・共有PCの場合
複数人が使うPCや会社のPCではなるべくポリシーを変更しないことが基本です。
どうしても変更が必要な場合は以下のような対応が現実的です。
- 実行するセッションだけに一時的に適用する
Processスコープを使う。 - スクリプトに署名を付与して
AllSignedポリシーに対応させる。 - IT管理者に相談してグループポリシーを確認してもらう。
UnrestrictedやBypassをLocalMachineに設定するのはセキュリティリスクが上がるためおすすめしません。
Q&A
スクリプトや処理の効率化という観点ではJavaのStream APIも参考になります。

まとめ
- 実行ポリシーはPowerShellのスクリプト実行を制御するセキュリティの仕組みだよ。
- 「スクリプトの実行が無効になっているため~」エラーは
Set-ExecutionPolicy RemoteSigned -Scope CurrentUserで解決できることが多いよ。 - スコープは
CurrentUser(自分だけ)とLocalMachine(PC全体)で使い分けてね。 - 業務PCや共有PCは
Processスコープで一時的に対応するのが安全だよ。 - 変更が反映されない場合はグループポリシーやPowerShellのバージョン違いを疑ってみてね。
実行ポリシーを理解したら、次はPowerShell全体の使い方を広げてみませんか。コマンド一覧や実践的な活用例をまとめた記事もあわせてどうぞ。

次にやること
PowerShellの実行ポリシーを理解できたら次は実際に活用していくのがおすすめです。
- PowerShellで自動化したい
-
定期実行ツールの違いを詳しく見る
ちゅんろぐ
タスクスケジューラー vs PowerShell vs WSL cron 使い分けガイド WindowsでPythonやPowerShellスクリプトを定期実行したいときの選択肢を徹底比較。 タスクスケジューラー・PowerShell(Register-ScheduledTask)・WSL上のcronそれぞれの… - ソフト管理を効率化したい
-
wingetの使い方を詳しく見る
ちゅんろぐ
wingetコマンドの使い方まとめ【Windows 10/11対応】 winget(Windows Package Manager)の使い方をまとめて解説。インストール・一括更新・アンインストールの基本コマンドから、アプリ環境を丸ごと移行できるexport/importの…






