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
となる。この設定は、再起動後も有効。