Netwrix 1Secureは、データとアイデンティティ全体にわたる統合された可視性を提供します。14日間の無料トライアルでフルアクセス可能です。無料トライアルを開始

リソースセンターブログ

PowerShell の実行ポリシー

PowerShell の実行ポリシー

Aug 25, 2025

PowerShell の実行ポリシーは、スクリプトの実行条件を制御して、意図しない、または安全でない実行を減らします。実行ポリシーは、制限的(Restricted、AllSigned)なものから許可的(Unrestricted、Bypass)なものまであり、Process、CurrentUser、LocalMachine など複数のスコープに適用できます。セキュリティ境界ではありませんが、安全なスクリプト作成を促し、デジタル署名をサポートし、Group Policy を通じて一貫した組織的な管理を実現できます。

PowerShell の実行ポリシー入門

PowerShell では、実行ポリシー(execution policies)は、PowerShell スクリプトがシステム上で実行される条件を制御するために設計された安全機能です。これらのポリシーは、厳密にはセキュリティ機構ではありませんが、次の目的のために用いられます。

  • スクリプトの誤っての実行を防止する
  • 不明な、または信頼できないソースからスクリプトを実行するリスクを管理するのに役立つ

実行ポリシーは、スクリプトのセキュリティを強化するうえで重要な役割を果たします。実行可能なスクリプトの種類を制限することで、システムを守るための第一の防衛線として機能します。また、AllSigned や RemoteSigned のようなポリシーによって、スクリプトの出所に信頼を確立し、スクリプトが信頼できるソースから提供されていることを保証します。これにより、ユーザーがメールの添付ファイルや Web からダウンロードしたスクリプトを知らないうちに実行してしまうような状況で、人為的なミスを減らすことができます。より広い文脈では、組織は実行ポリシーを活用して、端末やユーザー全体にわたり一貫したセキュリティ実践を強制できます。

ただし、次の点にも注意する必要があります。

  • 実行ポリシーはセキュリティ境界ではありません。管理者権限を持つユーザーによって上書きされたり、特定の PowerShell フラグによって回避されたりする可能性があります。
  • 主な目的は、悪意のある意図を持つ攻撃者を止めることではなく、誤って実行されることを防ぐことです。

PowerShell の実行ポリシーは、署名付きスクリプト、安全なリポジトリ、その他の保護対策などを含む、より広範なセキュリティ戦略の一部として使用するべきです。

Netwrix Auditor for Windows File Servers

Netwrix Auditor for Windows File Server で新しいファイルの監視プロセスを効率化

詳しくはこちら

PowerShell の実行ポリシーを理解する

まず、実行ポリシーが実際にどのように機能するのかから始めましょう。スクリプトを実行すると、PowerShell が実行ポリシーを確認します。

  • スクリプトが、信頼できる発行元によって署名されている、またはローカルに由来するなどの要件を満たしていれば、そのまま実行されます。
  • スクリプトがポリシーの要件を満たしていない場合、PowerShell はその実行を防止し、エラーメッセージを表示します。

主なメリット

PowerShell の実行ポリシーには、次のような主な利点があります。

  • 悪意のあるスクリプトの誤っての実行を防止します — 実行ポリシーにより、信頼できない、または有害なスクリプト(特にインターネットからダウンロードされたもの)を意図せずに実行してしまうリスクが低減されます。
  • 安全なスクリプト作成の実践を促進します — AllSigned や RemoteSigned のようなポリシーでは、スクリプトの作成者やユーザーに対して、信頼できる証明書でスクリプトに署名することを推奨し、真正性と完全性を確保します。
  • ローカルとリモートのスクリプトを使い分けます — RemoteSigned のようなポリシーでは、ローカルで作成されたスクリプトを制限なく実行できる一方で、リモートまたはダウンロードされたスクリプトにはより厳格な制御を適用します。
  • 柔軟な設定 — 実行ポリシーは複数のスコープ(Process、CurrentUser、LocalMachine、MachinePolicy、UserPolicy)に適用できるため、管理者はポリシーをどのように、どこで適用するかを制御できます。
  • 柔軟性のための一時的な上書き — 一時的な上書き(例:-ExecutionPolicy Bypass の使用)により、システムのセキュリティ設定を恒久的に変更することなく、管理された状況でスクリプトを実行できます。
  • 組織のコンプライアンスを促進します。実行ポリシーは、グループ ポリシーを通じて組織全体に適用し、スクリプト実行における一貫したセキュリティ手順を確実にできます。
  • スクリプトのセキュリティに関する意識を高めます。スクリプトへの署名やポリシーのバイパスなど、明示的な操作を要求することで、実行ポリシーはユーザーに対し、スクリプトの出所と信頼性を批判的に考えることを促します。

主な制限

PowerShell の実行ポリシーには、主に次のような制限があります。

  • 実行ポリシーは、意図的な攻撃を防ぐために設計されていないため、セキュリティ境界ではありません。管理者権限を持つ知識のあるユーザーは、次のように簡単にバイパスできます。
  • -ExecutionPolicy Bypass フラグを使用する
  • システムレジストリを変更する
  • 別のプロセス内でスクリプトを実行するか、PowerShell を完全に回避する
  • 実行ポリシーはスクリプトの内容を分析しません。署名キーが侵害されている場合、署名済みのスクリプトでも悪意のあるコードが含まれている可能性があります。
  • 実行ポリシーは PowerShell のスクリプトとコマンドにのみ適用されるため、保護範囲が限定的です。他のスクリプト形式(例:VBScript、Python)や実行ファイルは制御できないため、保護に隙間が生じます。
  • AllSigned のような厳格なポリシーは、ユーザーが信頼できる署名インフラにアクセスできない場合や、未署名スクリプトで作業することが頻繁にある場合に、遅延を引き起こすことがあります。
  • 実行ポリシーは、ユーザーがそれを遵守することに依存しています。訓練を受けていないユーザーは、実行ポリシーを回避したり、その影響を十分に理解しないまま無効化したりする可能性があります。
  • MachinePolicy、UserPolicy、Process などの複数のポリシー スコープは、特に混在または重複する設定がある環境では混乱を招く可能性があります。
  • 自動化スクリプトや CI/CD パイプラインは、制限の厳しいポリシーが原因で問題に遭遇することがあり、そのために追加の設定や一時的なポリシー上書き(override)が必要になる場合があります。
  • 実行ポリシーは、誤った安心感を生む可能性があります。管理者やユーザーは、それらが堅牢なセキュリティ機構だと誤って考えるかもしれませんが、実際には主に、スクリプトの偶発的な実行を防ぐための安全策です。

次の表は、PowerShell の実行ポリシーの主な利点と制限をまとめたものです。

Script Execution Control

Prevents accidental execution of harmful scripts

Easily bypassed by users with administrative privileges

Source Validation

Encourages script signing and trusted sources

Does not verify script contents for malicious behavior

Organizational Use

Supports consistent enforcement through Group Policy

May hinder productivity in environments with unsigned scripts

Flexibility

Allows scoped configurations and temporary overrides

Multiple scopes can be confusing for policy management

Security Scope

Adds a layer of defense in a security strategy

Limited to PowerShell scripts, leaving other tools unprotected

PowerShell の実行ポリシーの種類

PowerShell には 6 種類の実行ポリシーがあります。

制限付き

これは Windows システムにおける既定の実行ポリシーです。すべてのスクリプトの実行をブロックするため、管理者はスクリプトを使ってタスクを自動化できません。このポリシーでは、個々のコマンドのみを対話的に実行できます。

このポリシーはスクリプトの実行に対する制限を最大にするため、スクリプトが不要な環境に適しています。

RemoteSigned

これは Windows サーバーの既定の実行ポリシーです。このポリシーでは、インターネットからダウンロードしたものなど、リモートから取得したスクリプトが信頼できる発行元によって署名されていることが必要です。ローカル コンピューターで作成したスクリプトには署名は不要です。全体として、このポリシーはセキュリティと利便性のバランスを取っていますが、状況によっては不便になる場合があります。

インターネットからダウンロードした署名なしのスクリプトを実行するには、たとえば Unblock-File cmdlet を使用してブロックを解除する必要があります。

AllSigned

このポリシーは、信頼できる証明書と証明書インフラストラクチャに依存します。このポリシーのもとでは、信頼できる発行元によって署名されたスクリプトと構成ファイルのみが実行できます。署名されていない、または改ざんされたスクリプトは実行できません。さらに、たとえ署名済みであっても、いかなるスクリプトを実行する前にユーザーに確認が求められます。

このポリシーは、スクリプトの完全性と認証を強く重視する環境に最適です。

制限なし

このポリシーでは、すべてのスクリプトを制限なしで実行できます。ただし、実行前にリモートの未署名スクリプトには警告が表示されます。これは Windows 以外のコンピューターにおける既定の実行ポリシーであり、変更できません。

このポリシーは、悪意のある、または有害なスクリプトの実行リスクを高めるため、セキュリティよりも柔軟性が優先される開発環境またはテスト環境に限定すべきです。

バイパス

このポリシーにより、スクリプトは警告やプロンプトなしで自由に実行できます。自動化のシナリオ、CI/CD パイプライン、または実行ポリシーが正当なワークフローを妨げる場合に、このオプションを使用してください。保護や制限が一切ないことで、偶発的または悪意のあるスクリプト実行のリスクが増大する点に注意してください。

未定義

このオプションを使用すると、現在のスコープの実行ポリシーが削除されます。すべてのスコープが未定義の場合、有効なポリシーはデフォルトで Restricted(Windows クライアント)で RemoteSigned(Windows Server)になります。スコープの実行ポリシー設定をクリアするために使用します。

PowerShell 実行ポリシーのスコープ

PowerShell の実行ポリシーはさまざまなスコープ(範囲)に適用でき、ポリシーがどのように、またどこで適用されるかが決まります。スコープにより、管理者は、個々のユーザー、マシン上のすべてのユーザー、または単一のセッションなど、異なるレベルでスクリプトの実行動作を制御できます。各スコープについては以下で説明します。

MachinePolicy

Set by a Group Policy for all users of the computer. This policy overrides LocalMachine and CurrentUser. To override this policy, remove the Group Policy setting. It is used for centralized management of script execution policies for all users on a machine.

UserPolicy

Set by a Group Policy for the current user of the computer. This policy overrides LocalMachine and CurrentUser. It is used or centralized management for individual users within a domain environment. Like MachinePolicy, this policy cannot be overridden locally.

Process

Applies to the current PowerShell session only. The policy is saved in the $env:PSExecutionPolicyPreference environment variable. When the PowerShell session is closed, the variable and value are deleted. Hence the policy is temporary and ends when the session is closed. It is useful for testing or temporarily overriding the system policy without permanent changes.

CurrentUser

Applies only to the current logged-in user. This policy is stored in the CurrentUser configuration file. It is used to set a policy for individual users without affecting other users on the same computer.

LocalMachine

Applies to all users on the computer. This policy is stored in the AllUsers configuration file. This is the default scope when no scope is specified. Use it for organization-wide policies on shared machines or when multiple users need the same policy.

現在のユーザーおよびローカル コンピューターの実行ポリシーは、PowerShell の構成ファイルに保存されます。特定のセッションの実行ポリシーはメモリ内にのみ保存され、セッションを閉じると失われます。

スコープの優先順位

異なるスコープに複数の実行ポリシーが定義されている場合、PowerShell は次の優先順位の順に従って、有効になるポリシーを決定します(優先度が高い順から低い順):

  1. グループ ポリシー:MachinePolicy
  2. グループ ポリシー:UserPolicy
  3. 実行ポリシー:Process
  4. 実行ポリシー:LocalMachine
  5. 実行ポリシー:CurrentUser

次の点を覚えておいてください:

  • グループ ポリシーの設定(MachinePolicy と UserPolicy)は、ローカル構成を上書きします。
  • 実行ポリシーを設定するときにスコープを指定しない場合、既定では LocalMachine が使用されます。
  • グループ ポリシーが適用されている場合、より低いスコープで Set-ExecutionPolicy によりポリシーを変更しようとしても失敗します。

PowerShell 実行ポリシーの設定

PowerShell の実行ポリシーを設定すると、システム上でスクリプトをどのように実行するかが決まります。

現在の実行ポリシーを確認する

次の cmdlet を使用して、現在の実行ポリシーを確認します。

      Get-ExecutionPolicy
      
Image

すべてのスコープのポリシーを確認する

次の cmdlet を使用して、すべてのスコープのポリシーを確認します。

      Get-ExecutionPolicy -List
      
Image

実行ポリシーを設定する

Set-ExecutionPolicy cmdlet を使用して、PowerShell の実行ポリシーを設定します。

コマンド構文

      Set-ExecutionPolicy <PolicyName> -Scope <Scope>
      

例 1 – 実行ポリシーの設定

次の cmdlet を使用して、ポリシーを Unrestricted に設定します。

      Set-ExecutionPolicy Unrestricted
      
Image

進めるには Y を押すか、L を押して操作を中止します。

例 2 – 実行ポリシーのスコープを指定する

ポリシーはさまざまなレベル(スコープ)で設定できます。次の cmdlet を使用して、ローカル マシンに対してポリシーを RemoteSigned に設定します:

      Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
      

次の点に注意してください。

  • LocalMachine スコープの実行ポリシーを設定するには、PowerShell を管理者として実行する必要があります。
  • ポリシーがグループ ポリシー(MachinePolicy または UserPolicy)によって強制適用されている場合、他の設定より優先され、ポリシーを変更しようとするとエラーになります。

リモート コンピューターからローカル コンピューターに実行ポリシーを適用する

リモート コンピューターの PowerShell 実行ポリシーをローカル コンピューターに適用するには、PowerShell リモーティングと Set-ExecutionPolicy コマンドレットの組み合わせを使用できます。手順は次のとおりです:

      Invoke-Command -ComputerName TargetComputer -ScriptBlock {

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force

} -Credential (Get-Credential)
      

ここで、-ComputerName は対象コンピューターを指定します。-ScriptBlock には実行するコマンドが含まれます(この場合は Set-ExecutionPolicy)。-Credential は、現在のアカウントに対象コンピューターへの権限がない場合に、資格情報を指定できるようにします。

ポリシー設定を強制的に適用する

実行ポリシーの変更中にプロンプトを無視するには、-Force パラメーターを使用します。

      Set-ExecutionPolicy RemoteSigned -Force
      

実行ポリシーを削除する

特定のスコープに対するポリシーを削除するには、ポリシーを Undefined に設定します。

      Set-ExecutionPolicy Undefined -Scope CurrentUser
      

すべてのスコープが Undefined に設定されている場合、既定のポリシーは Restricted になります。

PowerShell の実行ポリシーを一時的に回避する

PowerShell でスクリプトを実行するとき、ポリシーを恒久的に変更せずに実行ポリシーを一時的に回避できます。ただし、実行ポリシーを回避すると、システムがセキュリティ上のリスクにさらされる可能性があります。実行するスクリプトが信頼できるソースから提供されていることを確認してください。

また、一部のコマンドでは管理者権限が必要になる場合があります。

例 1:単一スクリプトの実行ポリシーをバイパスする

このコマンドは、該当する PowerShell の特定の呼び出しについて実行ポリシーをバイパスします。

      powershell.exe -ExecutionPolicy Bypass -File "C:\Temp\Script.ps1"
      

Example 2: Bypass in the Current Session

現在のセッションの間だけ、実行ポリシーを一時的に変更できます。

      Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
      

ここでの -Scope Process は、変更が現在の PowerShell セッションにのみ限定されることを保証します。セッションを閉じると、実行ポリシーは元の設定に戻ります。

例 3:ポリシーを変更せずにスクリプトを実行する

−Command パラメーターを使用して、スクリプトをインラインで直接実行します。

powershell.exe -ExecutionPolicy Bypass -Command “& { . ‘C:\Temp\Script.ps1’ }”

グループ ポリシーを使用して実行ポリシーを管理する

Turn on Script Execution のグループ ポリシー設定により、組織内のコンピューターの実行ポリシーを管理できます。このグループ ポリシー設定は、すべてのスコープにおいて PowerShell で設定されている実行ポリシーを上書きします。

  • Turn on Script Execution が無効になっている場合、スクリプトは実行されません。これは Restricted の実行ポリシーと同等です。
  • Turn on Script Execution を有効にし、実行ポリシーを選択できます。
  • Turn on Script Execution が未構成の場合、効果はありません。有効なのは PowerShell で設定された実行ポリシーです。

署名済みおよび未署名のスクリプトを管理する

署名済みスクリプトとは、次の内容を含む PowerShell スクリプトです。

  • スクリプトの内容
  • 信頼できる認証局(CA)または自己署名証明書によるデジタル署名

これにより、スクリプトが信頼できる提供元からのものであり、署名後に改変されていないことが保証されます。署名済みスクリプトは、どのスクリプトを実行できるかを制御する必要がある環境でセキュリティを強化するのに役立ちます。

次の実行ポリシーは、署名済みスクリプトに関連しています。

  • AllSigned — すべてのスクリプトおよび構成ファイルに、信頼できる発行元による署名が必要です。
  • RemoteSigned — インターネットからダウンロードされたスクリプトに、信頼できる発行元による署名が必要です。ローカル スクリプトには署名は不要です。

スクリプトに署名する

スクリプトに署名するには、コード署名証明書が必要です。

  • 証明書は認証局(CA)から取得することもできますし、New-SelfSignedCertificate コマンドレットを使用して自己署名証明書を生成することもできます。
  • Set-AuthenticodeSignature コマンドレットを使用してスクリプトに署名します。

スクリプトに署名する方法は次のとおりです。

      $cert = Get-Item Cert:\CurrentUser\My\CERT_THUMBPRINT
      
      Set-AuthenticodeSignature -FilePath "C:\Temp\Script.ps1" -Certificate $cert
      

CERT_THUMBPRINT を証明書の実際のサムプリント(thumbprint)に置き換えてください。

スクリプト署名の状態を表示

スクリプトに署名がされているか、また署名の状態を確認するには、次を使用します:

      Get-AuthenticodeSignature -FilePath "C:\Temp\Script.ps1"
      

信頼できない、または未署名のスクリプトを管理する

ポリシーを完全に回避せずにスクリプトの権限を管理するには、次の点を考慮してください:

  • スクリプトが「インターネットから取得」としてマークされている場合は、ブロックを解除します。
  • 発行元(パブリッシャー)の署名付きスクリプトを初めて実行する場合、発行元の証明書を承認する必要があることがあります。証明書管理ツールを使って、その証明書を信頼済みに追加できます。

例:スクリプトのブロックを解除する

場合によっては、スクリプトがインターネットからダウンロードされたためにブロックされることがあります。実行ポリシーを回避せずに解除するには、Unblock-File コマンドレットを使用してください。

      Unblock-File -Path "C:\Temp\Script.ps1"
      

スクリプトの権限を管理する

PowerShell でスクリプトの権限を管理するには、どのスクリプトを誰が実行できるかを制御します。これには、実行ポリシーの構成、ファイル権限の活用、コード署名の実践が含まれます。

PowerShell の実行ポリシーを使用してスクリプトの実行を制御する

実行ポリシーは、スクリプトが実行できる条件を制限します。ポリシーによって適用される制限は異なります。たとえば Restricted ポリシーでは、スクリプトを実行できません。

スクリプトにコード署名を使用する

スクリプトに署名することで、厳格なポリシーが適用されている環境では信頼できるスクリプトのみが実行できるようになります。

NTFS のファイル権限を使用する

ファイルまたはフォルダーの権限を変更して、スクリプト ファイルへのアクセスを制限します。権限を付与または拒否する方法は次のとおりです。

  1. スクリプト ファイルまたはフォルダーを右クリックし、「プロパティ」を選択します。
  2. 「セキュリティ」タブに移動し、「編集」をクリックします。
  3. ユーザーまたはグループを追加または削除し、適切な権限を割り当てます(例:読み取り、書き込み、実行)。
  4. 不正なユーザーに対して権限を拒否し、実行または変更を防止します。

グループ ポリシーを使用して権限を制御する

グループ ポリシーでは、複数のシステムにわたってスクリプトの権限と実行ポリシーを強制できます。グループ ポリシーを設定するには:

  1. Group Policy Management 」コンソール(GPMC)を開きます。
  2. 次に移動します:コンピューターの構成 > 管理用テンプレート > Windows コンポーネント > Windows PowerShell。
  3. 「Turn on Script Execution」ポリシーを使って、希望する実行ポリシーを設定します。

インターネットのソースからのスクリプトを保護する

インターネットからダウンロードしたスクリプトは、安全でないものとしてマークされます。実行する前にテキスト エディターでスクリプトを開き、安全性を確認してください。

実行ポリシー設定のベストプラクティス

PowerShell の実行ポリシーを正しく設定することは、安全性と機能性のバランスを取るうえで不可欠です。セキュリティの観点では、実行ポリシーは堅牢なセキュリティ境界ではなく、スクリプトの誤っての実行を防ぐためのツールであることを理解する必要があります。実行ポリシーは、アクセス制御、スクリプト署名、エンドポイント保護などの他のセキュリティ対策と併用してください。企業環境では、グループポリシーを通じて一貫したポリシーを強制し、リスクを最小化するためにユーザーへベストプラクティスを教育します。

安全性と機能性のバランスを取る実行ポリシーの設定に関するベストプラクティスを、以下に示します。

最も権限が少ないポリシーを使用する

可能な限り Restricted または AllSigned の実行ポリシーを適用して、より厳格な制御を行うべきです。 RemoteSigned は、ある程度の柔軟性が必要だが、それでも外部の脅威から保護する必要がある環境にとって現実的な選択肢です。

Bypass を恒久的に使用しない

Bypass の実行ポリシーは、特定の自動化またはトラブルシューティングの場面でのみ使用してください。作業が完了したら、より厳格なポリシーに戻します。

デジタル署名を使用する

信頼できる認証局(CA)を使用してスクリプトに署名し、完全性と真正性を確保します。特に AllSigned ポリシーで使用する場合は、スクリプト開発者にもスクリプトへ署名することを促す必要があります。

監視とログ記録を実装する

疑わしいアクティビティを検出して対応するために、PowerShell アクティビティのログ記録を有効にします(例:スクリプト ブロック ログ、モジュール ログ、転写)。

次の cmdlet を使用してモジュール ログ記録を有効にします:

      Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ModuleLogging" -Name EnableModuleLogging -Value 1
      

ログは、イベント ビューアで Applications and Services Logs > Microsoft > Windows > PowerShell の下から参照できます。

Microsoft Defender for Endpoint や SIEM のようなソリューションを使ってログを監視することもできます。

本番環境ではない環境でポリシーをテストする

驚くような事態を避けるため、組織全体に展開する前に、制御された環境で実行ポリシーをテストしてください。これにより、正当なスクリプトや自動化されたワークフローが中断されないことも確認できます。

条件付きのポリシー変更を使用する

柔軟性が必要なワークフローを管理するには、-Scope Process パラメーターを使用してポリシーを一時的に変更します。cmdlet は次のとおりです:

      Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
      

ポリシーを適用する際は環境を考慮する

推奨される PowerShell の実行ポリシーは、環境によって異なります。

  • 開発環境 – RemoteSigned は引き続き推奨ポリシーです。これにより、開発者がローカル スクリプトを署名せずに実行できる柔軟性が確保されると同時に、インターネットからダウンロードされたスクリプトが署名され信頼できる状態であることが保証されます。さらに、スクリプトの実行を監視するためにスクリプト ブロックのログ記録も有効にしてください。
  • テスト/ステージング環境 – RemoteSigned または AllSigned ポリシーを使用してください。RemoteSigned は、基本的な整合性チェックによりローカル スクリプトと外部スクリプトを混在させたテストに実用的です。AllSigned は、すべてのスクリプトに署名を要求することで、より厳格な制御を適用します。
  • 本番環境 – AllSigned または Restricted ポリシーを使用してください。AllSigned は、信頼できる発行元によって署名されたスクリプトのみが実行されることを保証します。ただし、PowerShell スクリプトに依存しない環境では、Restricted が最も安全な選択肢です。さらに、システム全体での一貫性を確保するために、グループ ポリシーを通じてポリシーを強制適用する必要があります。
  • 自動化環境 – Bypass は推奨ポリシーです(特定のタスクにのみ適用)。これにより、特にアプリケーションのホワイトリストや DevOps パイプラインのようにポリシーが別の仕組みで管理されている場合でも、自動化タスクを中断することなく実行できます。さらに、適切なアクセス制御と定期的な監査によって自動化環境を保護する必要があります。
  • 高度にセキュアな環境 – Restricted ポリシーを選択すべきです。これは、スクリプトの実行を一切防止します。

実行ポリシーのエラーをトラブルシューティングする

以下は、PowerShell の実行ポリシーに関連するよくあるエラーとその解決策です。

“このシステムではスクリプトの実行が無効になっています”

次のようなエラーメッセージが表示されることがあります。

このシステムではスクリプトの実行が無効になっているため、ファイル C:\Temp\Script.ps1 を読み込めません。

原因: 実行ポリシーが Restricted または Undefined に設定されているため、いかなるスクリプトも実行できません。

解決策: 現在のポリシーを確認し、特定のセッションの間だけ一時的に変更してください。もしくは、現在のユーザーまたはマシンのポリシーを変更することもできます:

現在のセッションのポリシーを変更するには、次の cmdlet を使用します:

      Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
      

現在のユーザーまたはマシンのポリシーを変更するには、次の cmdlet を使用します:

      Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
      

“デジタル署名されていないため、このスクリプトを読み込めません”

次のようなエラーメッセージが表示される場合があります。

ファイル C:\Temp\Script.ps1 を読み込めません。このファイルにはデジタル署名がありません。

原因: 実行ポリシーが AllSigned または RemoteSigned に設定されているため、スクリプトに署名が必要です。

解決策: ローカルのスクリプトを信頼している場合は、AllSigned の代わりに RemoteSigned を使用します。または、ポリシーを一時的にバイパスすることもできます。

“レジストリ キーへのアクセスが拒否されました”

次のようなエラーメッセージが表示される場合があります:

Set-ExecutionPolicy :レジストリキーへのアクセスが拒否されました。

原因: LocalMachine スコープで実行ポリシーを変更するための十分な権限がありません。

解決策: 管理者として PowerShell を実行するか、次の cmdlet を使用して現在のユーザーのポリシーを設定します:

      Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
      

スコープ間での実行ポリシーの競合

異なるスコープ(MachinePolicy、UserPolicy、Process、CurrentUser、LocalMachine)で競合するポリシーが存在しますか?

原因: より高いスコープ(例:MachinePolicy)で設定された、より厳格なポリシーが、より低いスコープ(例:LocalMachine)で設定された、より許容的なポリシーを上書きします。?

解決策: 次の cmdlet を使用して、すべてのスコープのポリシーを確認します。

      Get-ExecutionPolicy -List
      

この情報が分かれば、適切なスコープでポリシーを変更するか、より許容的なポリシーが適用されたセッションでスクリプトを実行できます。

「Group Policy Object(GPO)によって制御されているため、実行ポリシーを変更できません」

この問題は、実行ポリシーがグループ ポリシー(Group Policy)によって強制されているため、ローカルでの変更ができない場合に発生します。

解決策:グループ ポリシー(Group Policy)を変更するには、システム管理者に相談してください。ただし、すぐに解決する必要がある場合は、一時的にポリシーをバイパスできます。

「ポリシーのスコープが認識されません」

次のようなエラーメッセージが表示される場合があります。

Set-ExecutionPolicy : 指定されたスコープが認識されません。

原因: スコープ名にタイプミスがあります。

解決策: スコープが以下のいずれかとして正しく指定されていることを確認してください。

PowerShell のバージョンによる予期しない動作

2.0 のような古い PowerShell バージョンでは、実行ポリシーの扱いが異なったり、特定の機能が不足していたりする場合があります。

解決策: PowerShell の最新バージョンにアップグレードしてください。

ブロックされているとしてマークされたスクリプト

次のようなエラーメッセージが表示される場合があります。

ファイルを読み込めません。ファイルにデジタル署名がされていないか、インターネットからダウンロードされたためブロックされています。

原因:スクリプトがインターネットからダウンロードされたため、ブロックされているとしてマークされています。

解決策:次の cmdlet を使用してスクリプトのブロックを解除してください:

      Unblock-File -Path C:\Temp\Script.ps1
      

結論:適切な PowerShell 実行ポリシーの選択

効果的な実行ポリシーを選ぶ際には、これらの要素を考慮する必要があります。

  • 実行ポリシーを選ぶ前に環境を確認してください。環境によって必要なポリシーが異なるためです。たとえば、本番サーバーでは、スクリプトの検証を一定程度強制するために AllSigned または RemoteSigned が最適です。
  • セキュリティ要件も評価し、それに応じて判断する必要があります。たとえば、堅牢なコード署名プロセスがあり、スクリプト実行に対して厳密な制御を適用したい場合は AllSigned を使用します。あるいは、スクリプトを実行してはいけないシステムには Restricted を使用してください。
  • 自動化のニーズを考慮してください。スクリプトが信頼できるプロセスによって自動的に実行される環境では、Bypass ポリシーを使用する方が簡単です。
  • 最後に、スクリプトの出どころを評価してください。スクリプトが社内由来で信頼できる場合、RemoteSigned は利便性とセキュリティのバランスを提供します。また、スクリプトが社内と外部の混在である場合は、強化されたセキュリティのために AllSigned を検討してください。

よくある質問(FAQs)

$env:psexecutionpolicypreference 変数とは何ですか?

$env:PSExecutionPolicyPreference 環境変数は、PowerShell で使用され、システム全体またはユーザー固有の実行ポリシーを変更することなく、単一セッションに対して実行ポリシーを一時的に上書きするために使われます。セッションを閉じると、変更は失われます。

次のように $env:psexecutionpolicypreference を使用できます:

  • 次のように $env:PSExecutionPolicyPreference に値を設定して、実行ポリシーを一時的に変更します:

$env:PSExecutionPolicyPreference = “Bypass”

これにより、セッションの間はスクリプトが制限なく実行されます。

  • 次のように、この変数の現在の値を確認します:

$env:PSExecutionPolicyPreference

  • 一時的なポリシーを削除し、下に示すように既定の動作に戻します:

Remove-Item Env:PSExecutionPolicyPreference

共有する

もっと詳しく

著者について

Asset Not Found

Jonathan Blackwell

ソフトウェア開発責任者

2012年以降、エンジニアでありイノベーターである Jonathan Blackwell は、エンジニアリングのリーダーシップを通じて Netwrix GroupID を、Active Directory および Azure AD 環境におけるグループとユーザー管理の最前線に押し上げてきました。開発、マーケティング、営業での経験により、Jonathan は Identity 市場と買い手の考え方を深く理解できています。