PowerShell実行ポリシーの確認・変更方法
PowerShellの実行ポリシーについて
PowerShellの実行ポリシーは、スクリプトを実行する条件を制御する安全機能です。
Windowsクライアントマシンでは悪意のあるスクリプトの実行を防止のため、デフォルトでスクリプトファイルが実行できない設定となっています。
実行ポリシーのスコープ
実行ポリシーのスコープはコンピューター、ユーザー、セッションに対して設定できます。
またグループポリシー設定を使用してコンピューター、ユーザーに対して実行ポリシーを設定することもできます。
| スコープ | 内容 |
|---|---|
MachinePolicy |
グループポリシーでコンピューターのすべてのユーザーに設定 |
UserPolicy |
グループポリシーでコンピューターの現在のユーザーに設定 |
Process |
現在のPowerShellセッションに適用 |
CurrentUser |
現在のユーザーに適用 |
LocalMachine |
現在のコンピューター上のすべてのユーザーに適用 |
実行ポリシー
PowerShellの実行ポリシーは以下の通りです。
| 実行ポリシー | 署名付き | 署名なし/ローカル | 署名なし/非ローカル |
|---|---|---|---|
Restricted |
- | - | - |
AllSigned |
◯ | - | - |
RemoteSigned |
◯ | ◯ | - |
Unrestricted |
◯ | ◯ | △ |
Bypass |
◯ | ◯ | ◯ |
(◯:実行可能、△:実行時にユーザーの確認が必要、-:実行不可)
実行ポリシーが未設定の場合Undefinedとなります。
すべてのスコープで実行ポリシーがUndefinedの場合、有効な実行ポリシーはWindowsクライアントではRestricted、Windows ServerではRemoteSignedとなります。
実行ポリシーの確認方法
PowerShellでGet-ExecutionPolicyを実行すると現在の実行ポリシーが確認できます。
> Get-ExecutionPolicy
RemoteSigned
また、Get-ExecutionPolicyに-Listオプションをつけてを実行すると、
現在のセッションに影響を与えるすべての実行ポリシーを取得し、優先順で表示されます。
> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RemoteSigned
実行ポリシーの変更方法
WindowsクライアントではデフォルトでRestricted(スクリプトの実行が禁止)のため、PowerShellのスクリプトを実行できません。
> .\sample.ps1
このシステムではスクリプトの実行が無効になっているため、
ファイル sample.ps1 を読み込むことができません。...
スクリプトを実行できるようにするためには、以下のいずれかの対応を実施します。
恒久的にスクリプトを実行可能にする(管理者権限が必要)
管理者権限のPowerShellでSet-ExecutionPolicy Bypassを実行します。
> Set-ExecutionPolicy Bypass
実行後LocalMachineのポリシーがBypassとなり、スクリプトを実行できるようになります。
> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Bypass
一時的にスクリプトを実行可能にする(管理者権限不要)
管理者権限のないユーザの場合は、実行ポリシーのスコープをProcessとすることでスクリプトを実行できるようになります。
> Set-ExecutionPolicy Bypass -Scope Process
> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Bypass
CurrentUser Undefined
LocalMachine Restricted
Processに指定したポリシーは、PowerShellのウインドウを閉じると元に戻るため、PowerShellを起動するたびに設定が必要です。
PowerShell実行時のオプションで実行ポリシー指定(管理者権限不要)
バッチファイルからスクリプトを実行する場合は、PowerShellコマンドの-ExecutionPolicyオプションで実行ポリシーを変更して実行できます。
実行ポリシーBypassでsample.ps1を実行する場合は以下のようにします。
> PowerShell -ExecutionPolicy Bypass -File sample.ps1