PowerShell実行ポリシーの確認・変更方法

toc目次

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オプションで実行ポリシーを変更して実行できます。

実行ポリシーBypasssample.ps1を実行する場合は以下のようにします。

> PowerShell -ExecutionPolicy Bypass -File sample.ps1

参考