PowerShellでスクリプトを実行しようとしたときに、実行ポリシー(Execution Policy)のエラーに遭遇したことはありませんか?
その対処法としてよく見かけるのが、次の2つのコマンドです。
Set-ExecutionPolicy Bypasspowershell -ExecutionPolicy Bypass
一見似ていますが、この2つは動作も影響範囲もまったく異なります。
本記事では、初心者にもわかりやすく次の内容を解説します。
- 実行ポリシーの基本
- Set-ExecutionPolicy Bypass の意味と影響
- -ExecutionPolicy Bypass の意味と影響
- 両者の違いの整理
- 実務での正しい使い分け
目次
1. 実行ポリシー(Execution Policy)とは
実行ポリシーとは、PowerShellスクリプトの実行を制御する仕組みです。
目的はセキュリティというよりも、誤って危険なスクリプトを実行しないための“安全装置”です。
代表的な実行ポリシーは次の通りです。
- Restricted:スクリプト実行不可(既定値)
- RemoteSigned:ローカル作成は実行可、外部取得は署名が必要
- Unrestricted:すべて実行可能(警告あり)
- Bypass:制限なし・警告なし
Bypassは、実行ポリシーのチェックを完全に無視するモードです。
2. Set-ExecutionPolicy Bypass とは
基本構文
Set-ExecutionPolicy Bypass
このコマンドは、実行ポリシーの設定そのものを変更します。
特徴
- 恒久的に設定が変更される
- PowerShellを閉じても有効
- ISEや他のPowerShell環境にも影響
- レジストリに保存される
通常は次のスコープが変更されます。
- 管理者実行 → LocalMachine
- 一般ユーザー → CurrentUser
スコープ指定の例
Set-ExecutionPolicy Bypass -Scope CurrentUser
3. powershell -ExecutionPolicy Bypass とは
基本構文
powershell -ExecutionPolicy Bypass -File script.ps1
これは、そのPowerShellプロセスだけ一時的にBypassで実行する方法です。
特徴
- 一時的な設定
- ウィンドウを閉じると元に戻る
- システム設定は変更しない
- 自動化処理でよく使われる
タスクスケジューラやバッチファイルからPowerShellを呼び出す場合に多用されます。
4. 両者の違いの比較
| 項目 | Set-ExecutionPolicy Bypass | -ExecutionPolicy Bypass |
|---|---|---|
| 影響範囲 | 恒久的 | 一時的 |
| 設定保存 | される | されない |
| レジストリ変更 | あり | なし |
| PowerShell再起動後 | 有効 | 無効 |
| 主な用途 | 開発環境の設定変更 | 自動化・一時実行 |
5. 現在の実行ポリシーを確認する方法
Get-ExecutionPolicy -List
このコマンドで、スコープごとの実行ポリシーを確認できます。
6. 実務での正しい使い分け
開発・個人利用
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Bypassの常用は推奨されません。
RemoteSignedがバランスの良い設定です。
タスクスケジューラや自動実行
powershell -ExecutionPolicy Bypass -File script.ps1
一時的なBypassを使用します。
テストや検証
必要な場合のみ一時的にBypassを使用し、終了後は元に戻します。
7. セキュリティ上の注意点
実行ポリシーはセキュリティ境界ではありません。
悪意のあるユーザーは回避可能です。
そのため、Bypassを常用するのではなく、用途に応じて適切に設定することが重要です。
8. まとめ
- Set-ExecutionPolicy Bypass は恒久的な設定変更
- -ExecutionPolicy Bypass は一時的な実行
- 名前は似ているが用途はまったく異なる
- 実務ではRemoteSigned+一時Bypassが基本
実行ポリシーの違いを理解すると、PowerShellの運用が安全かつ効率的になります。
コメント