PowerShellのスクリプトを作成し、さあ実行しようとしたとき何もできない場合がある。
スクリプトファイルを直接実行したら実行できるのに、JP1やその他のアプリ経由だと実行できないといったことがある。そのような場合に、確認してほしい。
現在の実行ポリシーの確認
下記のコマンドをPowerShellで実行して、Windowsの実行ポリシーを確認する。
Get-ExecutionPolicy -list
下記、Get-ExecutionPolicy の実行結果の例。
実行ポリシーのスコープの説明
Scopeの値 | 内容 |
---|---|
MachinePolicy | すべてのユーザーに対するグループポリシーの設定。グループポリシーのため初期値と考えて良いと思われる。 |
UserPolicy | 現在のユーザーに対するグループポリシーの設定。グループポリシーのため新しく作成されたユーザーに対する初期値と思われる。 |
Process | 現在の PowerShell セッションに対する設定。新しく起動したPowerShellの画面では別の実行ポリシーとなる可能性がある。CurrentUserやLocalMachineの設定や、PowerShell実行時のオプション設定により変わると思われる。 |
CurrentUser | 現在のユーザーに対する設定 |
LocalMachine | すべてのユーザーに対する設定 |
上記から、ExecutionPolicyのデフォルト値は、Undefined である。
Undefinedは、Windows10クライアントではRestricted(個々のコマンドは許可するが、スクリプトは許可しない)、Windows ServerではRemoteSigned(ローカルに保存されたスクリプトを実行できる)
ExecutionPolicyの値と内容については下記となる。
ExecutionPolicyの値 | 内容 |
---|---|
AllSigned | 署名されたスクリプトのみ実行可能 |
Bypass | 何もブロックされず、警告やプロンプトは表示されない。通常は使うべきではない。 |
Default | 既定のポリシー。Windows10クライアントではRestricted、Windows ServerではRemoteSigned |
RemoteSigned | ローカルに保存されたスクリプトと、署名されたインターネットからダウンロードされたスクリプトが実行可能。OneDriveで同期したスクリプトは実行できなかった。 |
Restricted | 個々のコマンドは実行可能。スクリプトは実行できない。 |
Undefined | 実行ポリシーが設定されていない。Defaultと同様。 |
Unrestricted | 署名されていないスクリプトを実行可能。ローカルイントラネットゾーンからのものではないスクリプトを実行する場合は警告が表示される。 |
実行ポリシーの変更方法
下記のコマンドを実行して、Windowsの実行ポリシーを変更する。ローカルに保存されたスクリプトを実行できるようにするには、PowerShellを管理者として実行し、下記のコマンドを実行する。
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
ほとんど場合、署名無しでローカルに保存して実行すると思われる。スクリプトを実行するユーザーでログインして上記コマンドを実行すれば、必要最低限の実行操作ができると思われる。
コマンドプロンプトからPowerShellを呼び出してスクリプトを実行する場合
コマンドプロンプトからPowerShellを呼び出してPowerShellスクリプトを実行する場合は、下記のコマンドでPowerShellを起動する
powershell -ExecutionPolicy RemoteSigned
コメント