
PowerShellスクリプトが実行できないときの原因と対処法【実行ポリシーに注意】
/ 8 min read
Table of Contents
この記事で扱う内容
この記事では、スクリプトの実行が無効になっているエラーが発生し、PowerShellスクリプトが実行できないときの原因と対処法についてご紹介します。
以下は実際のエラーの例です。
前提
前提知識・前提スキル
- Windows OS の基本操作ができる人
前提環境
- 使用PC
- OS が Windows 10または 11であること
- PowerShell 5.1がインストールされていること(Windows 10または11標準搭載)
原因
PowerShellの「実行ポリシー」の設定が原因の可能性が高いです。
「実行ポリシー」とは、PowerShellスクリプトの実行を制御するWindowsのセキュリティ機能です。
Windows10または11における既定値は「Restricted」のため、スクリプトは実行できないようになっています。
PowerShellの実行ポリシーとは
PowerShellの実行ポリシーとそのスコープについて、簡単にご説明します。
PowerShell実行ポリシーについて
PowerShell実行ポリシーは、スクリプトの実行を制限するセキュリティ設定のこと。
以下の通り、7種類あります。
| No | 実行ポリシー | 制限の概要 |
|---|---|---|
| 1 | AllSigned | 署名されているスクリプトのみ実行可能。 |
| 2 | Bypass | すべてのスクリプトを制限なく実行可能。 警告も表示されない。 |
| 3 | Default | 既定の実行ポリシーを表す。Restricted。 |
| 4 | RemoteSigned | ローカルのスクリプトは自由に実行可能。しかし、リモートのスクリプト(例:インターネットからDLしたスクリプト)は署名が必要。 |
| 5 | Restricted | すべてのスクリプトが実行できない。 PowerShell での対話的なコマンド実行のみ使用可能。 |
| 6 | Undefined | 明示的な実行ポリシーの設定が存在しないことを表す。 すべてのスコープの実行ポリシーが「Undefined」の場合、「Restricted」になる。 |
| 7 | Unrestricted | すべてのスクリプトを実行可能。 ただし、リモートのスクリプト実行時には警告が表示される。 |
PowerShell実行ポリシー一覧(参考:about_Execution_Policies>PowerShell 実行ポリシー)
PowerShell実行ポリシーのスコープについて
PowerShell実行ポリシーのスコープは、その実行ポリシーを適用する範囲のこと。
以下の通り、5種類あります。
| No | スコープ | 適用範囲の概要 |
|---|---|---|
| 1 | MachinePolicy | コンピューターのすべてのユーザー。 グループポリシーで設定されるため、管理者のみ設定可能。 |
| 2 | UserPolicy | コンピューターの現在のユーザー。 グループポリシーで設定されるため、管理者のみ設定可能。 |
| 3 | Process | 現在のPowerShellセッション。 環境変数で設定されるため、一時的な設定。 PowerShellを閉じれば元に戻る。 テストや一時的なスクリプト実行に便利。 |
| 4 | CurrentUser | 現在のユーザー。 レジストリで設定されるため、PowerShell を閉じたり、コンピューターを再起動しても設定はそのまま保持される。 ユーザー単位なので管理しやすい。 |
| 5 | LocalMachine | コンピューターのすべてのユーザー。 レジストリで設定されるため、PowerShell を閉じたり、コンピューターを再起動しても設定はそのまま保持される。 設定するには管理者権限が必要。 |
PowerShell実行ポリシーのスコープ(参考:about_Execution_Policies>実行ポリシーのスコープ)
PowerShell実行ポリシーとスコープの優先順位について
スコープの優先順位は、上から順番に優先順位が高いです。
-
MachinePolicy
-
UserPolicy
-
Process
-
CurrentUser
-
LocalMachine
例:MachinePolicyやUserPolicyの実行ポリシーが有効な場合、ユーザーがProcess以下の実行ポリシーを設定しても、設定は無視される。
PowerShell実行ポリシーの確認方法
現在のスコープのPowerShell実行ポリシーを確認する
PowerShellで「Get-ExecutionPolicy」コマンドを実行する
コマンド例)
Get-ExecutionPolicyコマンド実行結果例)
Restricted
すべてのスコープのPowerShell実行ポリシーを確認する
コマンド例)
Get-ExecutionPolicy -Listコマンド実行結果例)
Scope ExecutionPolicy ----- ---------------MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser Restricted LocalMachine Undefined
PowerShell実行ポリシーの設定方法
一時的にスクリプトを実行可能にする
現在のPowerShellセッション内で有効になります(閉じれば元に戻る)
コマンド例)
Set-ExecutionPolicy -Scope Process RemoteSignedコマンド実行結果例)
(戻り値なし)
永続的にスクリプトを実行可能にする
現在のユーザー単位で設定が永続化します。
コマンド例)
Set-ExecutionPolicy -Scope CurrentUser RemoteSignedコマンド実行結果例)
(戻り値なし)
PowerShell実行ポリシーのおすすめ設定
用途に応じて、セキュリティ的に必要最低限の許可を与える方針がおすすめです。
| 場面 | おすすめ設定 |
|---|---|
| 一時的に自作スクリプトを動かしたい | Set-ExecutionPolicy -Scope Process RemoteSigned |
| 常に自作スクリプトを使う予定がある | Set-ExecutionPolicy -Scope CurrentUser RemoteSigned |
PowerShell実行ポリシーのおすすめ設定一覧
業務で使用する場合は、必ず現場のセキュリティポリシーやルールを確認しましょう。
セキュリティが厳しい場合は、必ずチームリーダーや上司など、責任者に使用可否を確認しましょう。
おすすめの関連記事
参考記事バッチファイルでPowerShellの実行ポリシーを設定する方法【自動化向け】