PowerShellスクリプトの実行ポリシーと有効化の方法

Windows 10 Home のマシンで PowerShell スクリプト(.ps1)を実行しようとしたところ、実行ポリシーによってスクリプトの実行が無効化されていました。

実行ポリシーとスクリプトの有効化の方法について調べたので、メモを残しておきます。

簡単に言うと以下のようになっていました。

  • Windos クライアントでは、デフォルトでスクリプトが無効化されている
  • Set-ExecutionPolicyコマンドレットによって、実行ポリシー実行ポリシーのスコープを変更できる

詳細は、以下を参照のこと。

実行ポリシーの確認

Get-ExecutionPolicyコマンドレットによって、実行ポリシーを確認できます。

PowerShellから以下を実行すると、現在適用されている実行ポリシーが表示されます。

> Get-ExecutionPolicy
Restricted # Restrictedはスクリプトの実行を禁止するポリシー

-List オプションをつけると、スコープ別の実行ポリシーが表示されます。

> Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined # PC上の全てのユーザに適用する実行ポリシー(グループポリシーとして設定)
   UserPolicy       Undefined # カレントユーザに適用する実行ポリシー(グループポリシーとして設定)
      Process       Undefined # カレントのPowerShellでのみ有効なポリシー
  CurrentUser       Undefined # カレントユーザに適用する実行ポリシー(レジストリで設定)
 LocalMachine      Restricted # PC上の全てのユーザに適用する実行ポリシー(レジストリで設定)

上記は実行ポリシーの適用順に並んでいるので、上から適用されていくようです。 補足ですが、LocalMachineの実行ポリシーを変更するには管理者権限が必要とのこと。

実行ポリシーの変更

Set-ExecutionPolicyコマンドレットによって、実行ポリシーを確認できます。

使い方は、PowerShellから以下のようにコマンドを実行すればOK。

> Set-ExecutionPolicy <実行ポリシー> -Scope <実行ポリシーのスコープ>`

設定例は以下のとおり。

1. 一時的にスクリプトを有効化したい場合

PowerShellから以下を実行する。

> Set-ExecutionPolicy RemoteSigned -Scope Process`  

この場合、実行ポリシーのスコープがProcessになっているので、上記コマンドを実行したPowerShell上でのみ、スクリプトの実行が有効になる。 PowerShellを閉じたら、実行ポリシーが変更前の状態に戻る。

2. マシンの全てのユーザで常にスクリプトを有効化したい場合

PowerShell を「管理者として実行」し、以下を実行する。

> Set-ExecutionPolicy RemoteSigned`  

上記のように、実行ポリシーのスコープを指定しない場合、スコープはLocalMachineとなる。この設定は、再起動後も有効。