PowerShellスクリプトが実行できないときの原因と対処法【実行ポリシーに注意】

eye catching image of powershell execution policy error 仕事の工夫

この記事で扱う内容

この記事では、スクリプトの実行が無効になっているエラーが発生し、PowerShellスクリプトが実行できないときの原因と対処法についてご紹介します。

想定読者

  • PowerShellスクリプト実行時に以下のようなエラーが発生し、対処法が分からず困っている人

※「D:\PowerShellScript\Search-ExcelContentSimple.ps1」の部分は例です。実際は、実行に失敗したスクリプトファイルパスが表示されます。

D:\PowerShellScript\Search-ExcelContentSimple.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル D:\PowerShellScript\Search-ExcelContentSimple.ps1 を読み込むことができません。詳細については、「about_Execution_Polic
ies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ D:\PowerShellScript\Search-ExcelContentSimple.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess

このシステムではスクリプトの実行が無効になっているため、ファイル D:\PowerShellScript\Search-ExcelContentSimple.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170)
を参照してください。
+ CategoryInfo : セキュリティ エラー: (: ) []、ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnauthorizedAccess

前提

前提知識・前提スキル

  • Windows OS の基本操作ができる人

前提環境

  • 使用PC
    • OS が Windows 10または 11であること
    • PowerShell 5.1がインストールされていること(Windows 10または11標準搭載)

古い環境でも、同様の方法で問題が解消される場合があります。

原因

PowerShellの「実行ポリシー」の設定が原因の可能性が高いです。

「実行ポリシー」とは、PowerShellスクリプトの実行を制御するWindowsのセキュリティ機能です。

Windows10または11における既定値は「Restricted」のため、スクリプトは実行できないようになっています。

PowerShellの実行ポリシーとは

PowerShellの実行ポリシーのアイキャッチ画像

PowerShellの実行ポリシーとそのスコープについて、簡単にご説明します。

PowerShell実行ポリシーについて

PowerShell実行ポリシーは、スクリプトの実行を制限するセキュリティ設定のこと。

以下の通り、7種類あります。

No実行ポリシー制限の概要
1AllSigned署名されているスクリプトのみ実行可能。
2Bypassすべてのスクリプトを制限なく実行可能。
警告も表示されない。
3Default既定の実行ポリシーを表す。Restricted。
4RemoteSignedローカルのスクリプトは自由に実行可能。しかし、リモートのスクリプト(例:インターネットからDLしたスクリプト)は署名が必要。
5Restrictedすべてのスクリプトが実行できない。
PowerShell での対話的なコマンド実行のみ使用可能。
6Undefined明示的な実行ポリシーの設定が存在しないことを表す。
すべてのスコープの実行ポリシーが「Undefined」の場合、「Restricted」になる。
7Unrestrictedすべてのスクリプトを実行可能。
ただし、リモートのスクリプト実行時には警告が表示される。
PowerShell実行ポリシー一覧(参考:about_Execution_Policies>PowerShell 実行ポリシー

PowerShell実行ポリシーのスコープについて

PowerShell実行ポリシーのスコープは、その実行ポリシーを適用する範囲のこと。

以下の通り、5種類あります。

Noスコープ適用範囲の概要
1MachinePolicyコンピューターのすべてのユーザー。
グループポリシーで設定されるため、管理者のみ設定可能。
2UserPolicyコンピューターの現在のユーザー。
グループポリシーで設定されるため、管理者のみ設定可能。
3Process現在のPowerShellセッション。
環境変数で設定されるため、一時的な設定。
PowerShellを閉じれば元に戻る。
テストや一時的なスクリプト実行に便利。
4CurrentUser現在のユーザー。
レジストリで設定されるため、PowerShell を閉じたり、コンピューターを再起動しても設定はそのまま保持される。
ユーザー単位なので管理しやすい。
5LocalMachineコンピューターのすべてのユーザー。
レジストリで設定されるため、PowerShell を閉じたり、コンピューターを再起動しても設定はそのまま保持される。
設定するには管理者権限が必要。
PowerShell実行ポリシーのスコープ(参考:about_Execution_Policies>実行ポリシーのスコープ

PowerShell実行ポリシーとスコープの優先順位について

スコープの優先順位は、上から順番に優先順位が高いです。

  1. MachinePolicy
  2. UserPolicy
  3. Process
  4. CurrentUser
  5. LocalMachine

例:MachinePolicyやUserPolicyの実行ポリシーが有効な場合、ユーザーがProcess以下の実行ポリシーを設定しても、設定は無視される。

PowerShell実行ポリシーの確認方法

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実行ポリシーの設定方法のアイキャッチ画像

一時的にスクリプトを実行可能にする

現在のPowerShellセッション内で有効になります(閉じれば元に戻る)

コマンド例)

Set-ExecutionPolicy -Scope Process RemoteSigned

コマンド実行結果例)

(戻り値なし)

参考画面キャプチャ)

永続的にスクリプトを実行可能にする

現在のユーザー単位で設定が永続化します。

コマンド例)

Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

コマンド実行結果例)

(戻り値なし)

参考画面キャプチャ)

PowerShell実行ポリシーのおすすめ設定

用途に応じて、セキュリティ的に必要最低限の許可を与える方針がおすすめです。

場面おすすめ設定
一時的に自作スクリプトを動かしたいSet-ExecutionPolicy -Scope Process RemoteSigned
常に自作スクリプトを使う予定があるSet-ExecutionPolicy -Scope CurrentUser RemoteSigned
PowerShell実行ポリシーのおすすめ設定一覧

業務で使用する場合は、必ず現場のセキュリティポリシーやルールを確認しましょう。

セキュリティが厳しい場合は、必ずチームリーダーや上司など、責任者に使用可否を確認しましょう。

補足・バリエーション

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