PowerShellが実行できない場合の対処

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

参考

実行ポリシーについて – PowerShell | Microsoft Docs

コメント

タイトルとURLをコピーしました