【初心者向け】PowerShellのSet-ExecutionPolicyとは?

Windows

PowerShellでスクリプト(.ps1ファイル)を実行しようとして、こんなエラーに遭遇したことはありませんか?

ファイル script.ps1 を読み込めません。このシステムでは
スクリプトの実行が無効になっているためです。

または

execution of scripts is disabled on this system.

これは、PowerShellの実行ポリシーによってスクリプトの実行が制限されているためです。

よくある場面

  • 便利なPowerShellスクリプトをダウンロードして実行したい
  • 自分で作ったスクリプトが動かない
  • 業務で使うスクリプトが実行できない

この問題を解決するのが、Set-ExecutionPolicyコマンドです。

この記事では、実行ポリシーの仕組みから安全な設定方法まで、初心者にもわかりやすく説明します。

スポンサーリンク

実行ポリシー(Execution Policy)とは?

何のためにある?

PowerShellの実行ポリシーは、スクリプトの実行を制御するセキュリティ機能です。

目的

  • 悪意のあるスクリプトの実行を防ぐ
  • ウイルスやマルウェアからシステムを保護
  • 不用意なスクリプト実行によるトラブルを防止

重要なポイント

  • デフォルトではスクリプト実行が無効
  • コマンドは問題なく実行可能
  • ユーザーが意図的に設定を変更する必要がある

Set-ExecutionPolicyとは?

Set-ExecutionPolicyは、この実行ポリシーを変更するためのPowerShellコマンドです。

基本構文

Set-ExecutionPolicy [ポリシー名] [-Scope スコープ] [-Force]

実行ポリシーの種類

6つのポリシー一覧

ポリシー名セキュリティレベル内容使用場面
Restricted?????すべてのスクリプト実行不可デフォルト設定
AllSigned????署名付きスクリプトのみ実行可企業環境
RemoteSigned???ダウンロードしたスクリプトは署名必須推奨設定
Unrestricted??すべて実行可(警告あり)開発環境
Bypass?制限なし(警告なし)特殊用途
Undefined設定なし(上位スコープに従う)初期状態

各ポリシーの詳細

Restricted(制限)

- すべてのスクリプトファイル(.ps1)が実行不可
- PowerShellコマンドは実行可能
- Windowsのデフォルト設定

AllSigned(すべて署名済み)

- デジタル署名されたスクリプトのみ実行可能
- 署名の発行者を信頼するかユーザーに確認
- 企業環境で推奨

RemoteSigned(リモート署名済み)

- ローカルで作成したスクリプトは実行可能
- インターネットからダウンロードしたスクリプトは署名が必要
- 個人利用に最適

Unrestricted(制限なし)

- すべてのスクリプトが実行可能
- ダウンロードしたスクリプトは警告が表示される
- 開発やテスト環境向け

Bypass(バイパス)

- 警告も制限もなし
- 完全に無制限
- 特殊な用途のみ

現在の設定を確認する方法

基本的な確認

現在の実行ポリシーを確認

Get-ExecutionPolicy

実行結果(例)

Restricted

詳細な確認

すべてのスコープの設定を確認

Get-ExecutionPolicy -List

実行結果(例)

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

スコープの説明

  • MachinePolicy:ドメインのグループポリシー(コンピューター)
  • UserPolicy:ドメインのグループポリシー(ユーザー)
  • Process:現在のPowerShellプロセスのみ
  • CurrentUser:現在のユーザーのみ
  • LocalMachine:コンピューター全体

安全な設定方法

推奨設定(個人ユーザー向け)

最も安全でバランスの良い設定

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

この設定の効果

  • ✅ 自分で作ったスクリプトは実行可能
  • ✅ ダウンロードしたスクリプトは署名チェック
  • ✅ 他のユーザーに影響しない
  • ✅ 管理者権限が不要

設定手順(詳細)

ステップ1:PowerShellを起動

  1. スタートメニューで「PowerShell」と検索
  2. 「Windows PowerShell」をクリック

ステップ2:現在の設定を確認

Get-ExecutionPolicy

ステップ3:設定を変更

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

ステップ4:確認メッセージに対応

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。
実行ポリシーを変更すると、about_Execution_Policies のヘルプ トピック
(https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。
実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべてはい(A)  [N] いいえ(N)  [L] すべていいえ(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"):

「Y」と入力してEnter

ステップ5:設定完了の確認

Get-ExecutionPolicy

実行結果

RemoteSigned

強制的に設定する方法

確認メッセージをスキップ

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force

注意 -Forceパラメータは確認を省略しますが、設定内容をよく理解してから使用してください。

他の設定パターン

システム全体に設定(管理者向け)

前提条件

  • PowerShellを管理者として実行
  • システム全体に影響

コマンド

Set-ExecutionPolicy RemoteSigned -Scope LocalMachine

管理者でPowerShellを起動する方法

  1. スタートメニューで「PowerShell」と検索
  2. 「Windows PowerShell」を右クリック
  3. 「管理者として実行」をクリック

現在のセッションのみ変更

一時的な設定

Set-ExecutionPolicy Bypass -Scope Process

特徴

  • PowerShellを閉じると設定がリセット
  • 他のPowerShellウィンドウには影響しない
  • テスト用途に最適

開発環境向け設定

すべて実行可能(警告あり)

Set-ExecutionPolicy Unrestricted -Scope CurrentUser

注意 この設定は便利ですが、セキュリティリスクが高くなります。

実際にスクリプトを実行してみる

テスト用スクリプトの作成

ステップ1:メモ帳でスクリプト作成

Write-Host "Hello, PowerShell!"
Get-Date

ステップ2:test.ps1として保存

ステップ3:PowerShellで実行

.\test.ps1

成功した場合の出力

Hello, PowerShell!
2024年6月4日 14:30:25

ダウンロードしたスクリプトの実行

注意 インターネットからダウンロードしたスクリプトは「ブロック」される場合があります。

ブロック解除方法

Unblock-File .\downloaded_script.ps1

または、ファイルのプロパティから

  1. ファイルを右クリック → プロパティ
  2. 「ブロックの解除」にチェック
  3. OK をクリック

セキュリティ上の注意点

基本的な安全対策

信頼できるスクリプトのみ実行

  • 作成者が明確
  • 内容を理解している
  • 公式サイトからダウンロード

スクリプト実行前の確認事項

  1. 内容をテキストエディタで確認
  2. 何をするスクリプトか理解
  3. 必要以上の権限を要求していないか
  4. 不審なネットワーク通信がないか

危険な設定

避けるべき設定

# ❌ 危険:制限なし
Set-ExecutionPolicy Bypass -Scope LocalMachine

# ❌ 危険:システム全体で制限なし
Set-ExecutionPolicy Unrestricted -Scope LocalMachine

使用後は設定を戻す

高いセキュリティが必要な場合

# スクリプト実行後に制限に戻す
Set-ExecutionPolicy Restricted -Scope CurrentUser

トラブルシューティング

よくあるエラーと対処法

エラー1:管理者権限が必要

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

対処法

# CurrentUserスコープを使用
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

エラー2:グループポリシーで制限

Set-ExecutionPolicy : Windows PowerShell 実行ポリシーをグループ ポリシーが上書きします。

対処法

  • 企業環境では管理者に相談
  • 個人PCではローカルグループポリシーを確認

エラー3:スクリプトがブロックされている

ファイル test.ps1 はインターネット経由でダウンロードされ、ブロックされている可能性があります。

対処法

Unblock-File .\test.ps1

設定が反映されない場合

確認手順

  1. 現在の設定を確認 Get-ExecutionPolicy -List
  2. 優先順位の理解 MachinePolicy > UserPolicy > Process > CurrentUser > LocalMachine
  3. 適切なスコープで設定 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

代替手段

PowerShell ISEでの実行

特徴

  • 統合開発環境
  • スクリプト作成・実行・デバッグが可能
  • 実行ポリシーの影響を受ける

PowerShell Core(推奨)

特徴

  • 新しいバージョンのPowerShell
  • クロスプラットフォーム対応
  • より柔軟なセキュリティ設定

インストール

  • Microsoft Store から「PowerShell」をインストール
  • または GitHub から最新版をダウンロード

まとめ

重要なポイント

基本設定(推奨)

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

理由

  • ✅ 個人使用に最適
  • ✅ 管理者権限不要
  • ✅ 他ユーザーに影響なし
  • ✅ 適切なセキュリティレベル

設定の選び方

用途推奨設定理由
個人学習・開発RemoteSigned + CurrentUserバランスが良い
企業環境AllSigned + LocalMachine高セキュリティ
テスト環境Unrestricted + Process一時的で安全
本番環境Restricted または AllSigned最高レベルの安全性

セキュリティのベストプラクティス

基本原則

  1. 最小権限の原則:必要最小限の設定
  2. スクリプト内容の確認:実行前に必ず内容をチェック
  3. 定期的な見直し:設定の定期的な確認
  4. ログの監視:スクリプト実行の記録

日常的な注意

  • 不明なスクリプトは実行しない
  • 公式サイト以外からのダウンロードは慎重に
  • 実行後は不要なら設定を戻す

コメント

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