PowerShellでスクリプトを実行しようとしたらこんなエラーが出て止まってしまったこと、ないです?
このシステムではスクリプトの実行が無効になっているため、ファイル〇〇.ps1 を読み込むことができません。
「え、なんで動かないの……」となるやつですよね。 実はこれ、PowerShellの実行ポリシーという仕組みが原因です。
初めて見ると少し面食らいますが、仕組みを理解してしまえばサクッと解決できます。この記事ではエラーの原因から安全な設定方法までまとめて解説します。
この記事でわかること
- 実行ポリシーとは何か、なぜ制限されているのか。
- Restricted / RemoteSigned / Unrestricted など各ポリシーの違い。
- 現在の設定を確認するコマンドの使い方。
- Set-ExecutionPolicy でポリシーを変更する方法。
- スコープ(CurrentUser / LocalMachine)の使い分け。
- 「スクリプトの実行が無効になっているため~」エラーの解決方法。
- 個人PC・業務PCそれぞれの推奨設定。
PowerShellの実行ポリシーとは?
なぜ実行が制限されているのか
実行ポリシーとはPowerShellがスクリプト(.ps1ファイル)を実行する際のルールを定める仕組みです。
Windowsではデフォルトでスクリプトの実行が制限されています。 これは悪意のあるスクリプトが意図せず実行されてしまうのを防ぐためのセキュリティ上の配慮です。
「スクリプトを実行したい」という場面でこの制限に引っかかるわけですね。
補足 実行ポリシーはあくまでも「うっかり実行してしまう」のを防ぐ仕組みです。 悪意のある攻撃者を完全に防ぐセキュリティ機能ではない点はMicrosoft公式でも明記されています。
参考:実行ポリシーについて – PowerShell | Microsoft Learn
実行ポリシーの種類と意味
ポリシーには以下の種類があります。
| ポリシー名 | 動作概要 |
|---|---|
| Restricted | すべてのスクリプトの実行をブロック。Windowsのデフォルト。 |
| AllSigned | 信頼された発行元によってデジタル署名されたスクリプトのみ実行可。 |
| RemoteSigned | ローカルで作成したスクリプトはそのまま実行可。インターネットからダウンロードしたスクリプトは署名が必要。 |
| Unrestricted | すべてのスクリプトを実行可。ただしインターネット由来のスクリプトは実行前に警告が出る。 |
| Bypass | 制限なし、警告なし。主にCI/CDなどの自動化環境向け。 |
| Undefined | 現在のスコープでポリシーが未設定。上位スコープの設定が適用される。 |
日常的な用途では RemoteSigned が使い勝手とセキュリティのバランスがよく、推奨されることが多いです。
現在の実行ポリシーを確認する方法
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と判断できるわけですね。
実行ポリシーを変更する方法
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 RemoteSigned
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環境であれば、以下のコマンドで解決できます。
- Step1現在の設定を確認するPowerShell
Get-ExecutionPolicy -ListPowerShell – 実行結果Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser Undefined LocalMachine Restricted - Step2CurrentUser スコープで RemoteSigned に変更するPowerShell
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser - Step3変更後に再確認するPowerShell
Get-ExecutionPolicyRemoteSignedと表示されれば設定完了です。スクリプトを再実行してみてください。
変更しても反映されない場合
設定を変更したはずなのに反映されないことがあります。よくある原因は以下のとおりです。
- グループポリシーで上書きされている
MachinePolicyやUserPolicyスコープに管理者が設定を入れていると、個人設定より優先されます。社用PCでは特に多いパターンです。 - スコープが噛み合っていない
LocalMachineを変えたつもりがCurrentUser側が優先されているケースもあります。Get-ExecutionPolicy -Listで全スコープを確認してみてください。 - PowerShellのバージョンが異なる
Windows PowerShell(5.1)とPowerShell 7系は別々の設定を持ちます。どちらで設定・実行しているか確認してみてください。
Windows PowerShell(5.1)とPowerShell 7系はそれぞれ独立した実行ポリシーを持っています。自分がどちらのバージョンを使っているか分からない場合や、最新版への移行を検討している方はこちらも参考にしてみてください。
セキュリティ的に安全な推奨設定
個人PCの場合
自宅など自分だけが使うPCであれば、以下の設定が使いやすいです。
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
- ローカルで自作したスクリプトはそのまま実行できます。
- ネットからダウンロードしたスクリプトには署名チェックが入るので、最低限の安全性は保てます。
- 管理者権限なしで設定できるのも手軽なポイントです。
業務・共有PCの場合
複数人が使うPC、または会社のPCではなるべくポリシーを変更しないことが基本です。
どうしても変更が必要な場合は以下のような対応が現実的です。
- 実行するセッションだけに一時的に適用する
Processスコープを使う。
Set-ExecutionPolicy Bypass -Scope Process
- スクリプトに署名を付与して
AllSignedポリシーに対応させる。 - IT管理者に相談してグループポリシーを確認してもらう。
UnrestrictedやBypassをLocalMachineに設定するのはセキュリティリスクが上がるためおすすめしません。
Q&A
- QSet-ExecutionPolicy を実行したら「レジストリへの書き込みに失敗しました」と出ました。
- A
管理者権限が必要なスコープ(LocalMachine)に書き込もうとしている可能性があります。
-Scope CurrentUserを付けてみてください。
- QPowerShell 7とWindows PowerShellで設定は共有される?
- A
共有されません。それぞれ独立した設定を持っています。 両方で使う場合は両方で設定を確認してみてください。
- QBypass と Unrestricted の違いは?
- A
どちらもすべてのスクリプトを実行できますが
Unrestrictedはインターネット由来のスクリプト実行時に警告が出ます。Bypassは警告もブロックもなしです。CI/CD環境などの自動化ではBypass -Scope Processがよく使われます。
- Q設定を元に戻したいときはどうすればいい?
- A
設定を元に戻すという指定はできないので、デフォルト値である
Restrictedを指定する形になると思います。
まとめ
- 実行ポリシーはPowerShellのスクリプト実行を制御するセキュリティの仕組みだよ。
- 「スクリプトの実行が無効になっているため~」エラーは
Set-ExecutionPolicy RemoteSigned -Scope CurrentUserで解決できることが多いよ。 - スコープは
CurrentUser(自分だけ)とLocalMachine(PC全体)で使い分けてね。 - 業務PCや共有PCは
Processスコープで一時的に対応するのが安全だよ。 - 変更が反映されない場合はグループポリシーやPowerShellのバージョン違いを疑ってみてね。
実行ポリシーを理解したら、次はPowerShell全体の使い方を広げてみませんか。コマンド一覧や実践的な活用例をまとめた記事もあわせてどうぞ。


