about_Execution_Policies

簡単な説明

PowerShell 実行ポリシーについて説明し、それらを管理する方法について説明します。

長い説明

PowerShell の実行ポリシーは、PowerShell が構成ファイルを読み込み、スクリプトを実行する条件を制御する安全機能です。 この機能は、悪意のあるスクリプトの実行を防止します。

Windows コンピューターでは、ローカル コンピューター、現在のユーザー、または特定のセッションの実行ポリシーを設定できます。 グループ ポリシー設定を使用して、コンピューターとユーザーの実行ポリシーを設定することもできます。

ローカル コンピューターと現在のユーザーの実行ポリシーは、レジストリに格納されます。 PowerShell プロファイルで実行ポリシーを設定する必要はありません。 特定のセッションの実行ポリシーはメモリにのみ格納され、セッションが閉じられると失われます。

実行ポリシーは、ユーザー アクションを制限するセキュリティ システムではありません。 たとえば、ユーザーは、スクリプトを実行できないときにコマンド ラインにスクリプトの内容を入力することで、ポリシーを簡単にバイパスできます。 代わりに、実行ポリシーは、ユーザーが基本ルールを設定するのに役立ち、意図せずに違反しないようにします。

Windows 以外のコンピューターでは、既定の実行ポリシーは Unrestricted 変更できません。 コマンドレットは Set-ExecutionPolicy 使用できますが、PowerShell ではサポートされていないことを示すコンソール メッセージが表示されます。 Windows 以外のUnrestrictedプラットフォームで返されますがGet-ExecutionPolicy、これらのプラットフォームでは Windows セキュリティ Zones が実装されていないため、動作は実際に一致Bypassします。

PowerShell 実行ポリシー

これらのポリシーの適用は、Windows プラットフォームでのみ行われます。 PowerShell 実行ポリシーは次のとおりです。

AllSigned

  • スクリプトを実行できます。
  • ローカル コンピューター上に記述するスクリプトを含め、すべてのスクリプトと構成ファイルが信頼された発行元によって署名されている必要があります。
  • まだ信頼済みまたは信頼されていない発行元からスクリプトを実行する前に、メッセージを表示します。
  • 署名済みで悪意のあるスクリプトを実行するリスク。

Bypass

  • 何もブロックされず、警告やプロンプトは表示されません。
  • この実行ポリシーは、PowerShell スクリプトを大規模なアプリケーションに組み込む構成、または PowerShell が独自のセキュリティ モデルを持つプログラムの基盤となる構成用に設計されています。

Default

  • 既定の実行ポリシーを設定します。
  • Restricted Windows クライアント用。
  • Windows サーバー用の RemoteSigned

RemoteSigned

  • Windows サーバー コンピューターの既定の実行ポリシー。
  • スクリプトを実行できます。
  • 電子メールおよびインスタント メッセージング プログラムを含むインターネットからダウンロードされるスクリプトと構成ファイルに、信頼できる発行元からのデジタル署名が必要です。
  • ローカル コンピューターに書き込まれ、インターネットからダウンロードされないスクリプトにデジタル署名は必要ありません。
  • コマンドレットを使用するなどしてスクリプトのブロックが解除されている場合は、インターネットからダウンロードされ、署名されていないスクリプトを Unblock-File 実行します。
  • インターネット以外のソースから署名されていないスクリプトを実行し、悪意のある可能性がある署名付きスクリプトを実行するリスクがあります。

Restricted

  • Windows クライアント コンピューターの既定の実行ポリシー。
  • 個々のコマンドを許可しますが、スクリプトは許可しません。
  • 書式設定ファイルと構成ファイル ()、モジュール スクリプト ファイル ()、PowerShell プロファイル.ps1 (.ps1xml.psm1) など、すべてのスクリプト ファイルの実行を禁止します。

Undefined

  • 現在のスコープに実行ポリシーが設定されていません。
  • すべてのスコープの実行ポリシーが有効な場合、有効な実行ポリシーは UndefinedRestricted Windows クライアント用で、Windows Server 用の RemoteSigned です。

Unrestricted

  • Windows 以外のコンピューターの既定の実行ポリシー。変更することはできません。
  • 署名されていないスクリプトを実行できます。 悪意のあるスクリプトを実行するリスクがあります。
  • ローカル イントラネット ゾーンからではないスクリプトと構成ファイルを実行する前に、ユーザーに警告します。

注意

インターネット パスと汎用名前付け規則 (UNC) パスを区別しないシステムでは、UNC パスによって識別されるスクリプトは 、RemoteSigned 実行ポリシーで実行できない場合があります。

実行ポリシー スコープ

特定のスコープでのみ有効な実行ポリシーを設定できます。

有効な値ScopeMachinePolicyUserPolicyProcessCurrentUserLocalMachine です。 実行ポリシーを設定する場合の既定値は LocalMachine です。

値は Scope 優先順位で一覧表示されます。 優先順位の高いポリシーは、より制限の厳しいポリシーが優先順位の低いレベルで設定された場合でも、現在のセッションで有効です。

詳細については、「 Set-ExecutionPolicy」を参照してください。

MachinePolicy

コンピューターのすべてのユーザーのグループ ポリシーによって設定されます。

UserPolicy

コンピューターの現在のユーザーのグループ ポリシーによって設定されます。

Process

スコープは Process 、現在の PowerShell セッションにのみ影響します。 実行ポリシーは、レジストリではなく環境変数 $env:PSExecutionPolicyPreferenceに保存されます。 PowerShell セッションが閉じられると、変数と値が削除されます。

CurrentUser

実行ポリシーは、現在のユーザーのみに影響します。 HKEY_CURRENT_USER レジストリ サブキーに格納されます。

LocalMachine

実行ポリシーは、現在のコンピューター上のすべてのユーザーに影響します。 HKEY_LOCAL_MACHINE レジストリ サブキーに格納されます。

PowerShell を使用した実行ポリシーの管理

現在の PowerShell セッションの有効な実行ポリシーを取得するには、コマンドレットを Get-ExecutionPolicy 使用します。

次のコマンドは、有効な実行ポリシーを取得します。

Get-ExecutionPolicy

現在のセッションに影響するすべての実行ポリシーを取得し、優先順位で表示するには:

Get-ExecutionPolicy -List

結果は次の出力例のようになります。

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser    RemoteSigned
 LocalMachine       AllSigned

この場合、現在のユーザーの実行ポリシーがローカル コンピューターの実行ポリシー セットよりも優先されるため、有効な実行ポリシーは RemoteSigned です。

特定のスコープの実行ポリシー セットを取得するには、次のGet-ExecutionPolicyパラメーターをScope使用します。

たとえば、次のコマンドは CurrentUser スコープの実行ポリシーを取得します。

Get-ExecutionPolicy -Scope CurrentUser

実行ポリシーを変更する

Windows コンピューターで PowerShell 実行ポリシーを変更するには、コマンドレットを Set-ExecutionPolicy 使用します。 変更はすぐに有効になります。 PowerShell を再起動する必要はありません。

スコープ LocalMachine または CurrentUser に対して実行ポリシーを設定した場合、変更はレジストリに保存され、再度変更するまで有効なままになります。

スコープの実行ポリシーを設定した Process 場合、レジストリには保存されません。 実行ポリシーは、現在のプロセスと子プロセスが閉じられるまで保持されます。

注意

Windows Vista 以降のバージョンの Windows で、 ローカル コンピューター LocalMachine スコープの実行ポリシーを変更するコマンドを実行するには、[ 管理者として実行 ] オプションを使用して PowerShell を起動します。

実行ポリシーを変更するには:

Set-ExecutionPolicy -ExecutionPolicy <PolicyName>

次に例を示します。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

特定のスコープで実行ポリシーを設定するには、次の手順を実行します。

Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>

次に例を示します。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

実行ポリシーを変更するコマンドは成功しても、有効な実行ポリシーは変更されません。

たとえば、ローカル コンピューターの実行ポリシーを設定するコマンドは成功できますが、現在のユーザーの実行ポリシーによってオーバーライドできます。

実行ポリシーを削除する

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

たとえば、ローカル コンピューターのすべてのユーザーの実行ポリシーを削除するには、次のようにします。

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine

次の実行ポリシーを Scope削除するには:

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

どのスコープにも実行ポリシーが設定されていない場合、有効な実行ポリシーは Restricted、Windows クライアントの既定値です。

1 つのセッションに別のポリシーを設定する

ExecutionPolicy パラメーターpwsh.exeを使用して、新しい PowerShell セッションの実行ポリシーを設定できます。 ポリシーは、現在のセッションと子セッションにのみ影響します。

新しいセッションの実行ポリシーを設定するには、PowerShell などの cmd.exe コマンド ラインで PowerShell を起動し、 ExecutionPolicy パラメーター pwsh.exe を使用して実行ポリシーを設定します。

次に例を示します。

pwsh.exe -ExecutionPolicy AllSigned

設定した実行ポリシーはレジストリに格納されません。 代わりに、環境変数に $env:PSExecutionPolicyPreference 格納されます。 ポリシーが設定されているセッションを閉じると、変数は削除されます。 変数の値を編集してポリシーを変更することはできません。

セッション中、セッションに設定された実行ポリシーは、ローカル コンピューターまたは現在のユーザーのレジストリに設定されている実行ポリシーよりも優先されます。 ただし、グループ ポリシーを使用して設定された実行ポリシーよりも優先されることはありません。

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

[スクリプト実行を有効にする] グループ ポリシー設定を使用して、企業内のコンピューターの実行ポリシーを管理できます。 グループ ポリシー設定は、すべてのスコープで PowerShell で設定された実行ポリシーをオーバーライドします。

スクリプト実行を有効にするポリシー設定は次のとおりです。

  • [スクリプトの実行を有効にする] を無効にした場合、スクリプトは実行されません。 これは実行ポリシーと Restricted 同じです。

  • [スクリプトの実行を有効にする] を有効にした場合は、実行ポリシーを選択できます。 グループ ポリシー設定は、次の実行ポリシー設定と同じです。

    グループ ポリシー 実行ポリシー
    すべてのスクリプトを許可する Unrestricted
    ローカル スクリプトおよびリモートの署名済みスクリプトを許可する RemoteSigned
    署名済みスクリプトのみ許可する AllSigned
  • [スクリプトの実行を有効にする] が構成されていない場合、効果はありません。 PowerShell の実行ポリシー セットは有効です。

PowerShellExecutionPolicy.adm ファイルと PowerShellExecutionPolicy.admx ファイルは、次のパスで、スクリプト実行ポリシーを グループ ポリシー エディターのコンピューター構成ノードとユーザー構成ノードに追加します。

Windows XP および Windows Server 2003 の場合:

Administrative Templates\Windows Components\Windows PowerShell

Windows Vista 以降のバージョンの Windows の場合:

Administrative Templates\Classic Administrative Templates\Windows Components\Windows PowerShell

[コンピューター構成] ノードで設定されたポリシーは、[ユーザー構成] ノードで設定されたポリシーよりも優先されます。

詳細については、「about_Group_Policy_Settings」を参照してください。

実行ポリシーの優先順位

セッションの有効な実行ポリシーを決定する場合、PowerShell は実行ポリシーを次の優先順位で評価します。

Group Policy: MachinePolicy
Group Policy: UserPolicy
Execution Policy: Process (or pwsh.exe -ExecutionPolicy)
Execution Policy: CurrentUser
Execution Policy: LocalMachine

署名付きスクリプトと署名されていないスクリプトを管理する

Windows では、Internet Explorer や Microsoft Edge などのプログラムは、ダウンロードされたファイルに代替データ ストリームを追加します。 これにより、ファイルは "インターネットから送信される" とマークされます。 PowerShell 実行ポリシーが RemoteSigned の場合、PowerShell では、電子メールプログラムやインスタント メッセージング プログラムを含む、インターネットからダウンロードされた署名されていないスクリプトは実行されません。

実行ポリシーを変更せずに、スクリプトに署名するか、署名されていないスクリプトを実行するように選択できます。

PowerShell 3.0 以降では、コマンドレットの Stream パラメーターを Get-Item 使用して、インターネットからダウンロードされたためにブロックされたファイルを検出できます。 PowerShell でスクリプトを Unblock-File 実行できるように、コマンドレットを使用してスクリプトのブロックを解除します。

詳細については、「 about_SigningGet-Item、および Unblock-Fileを参照してください。

注意

ファイルをダウンロードする他の方法では、ファイルがインターネット ゾーンから取得されたとマークされない場合があります。 次に例をいくつか示します。

  • curl.exe
  • Invoke-RestMethod
  • Invoke-WebRequest

Windows Server Core と Windows Nano Server での実行ポリシー

特定の条件下で Windows Server Core または Windows Nano Server で PowerShell 6 を実行すると、実行ポリシーが次のエラーで失敗する可能性があります。

AuthorizationManager check failed.
At line:1 char:1
+ C:\scriptpath\scriptname.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

PowerShell では、Windows デスクトップ シェル (explorer.exe) の API を使用して、スクリプト ファイルのゾーンを検証します。 Windows Shell は、Windows Server Core および Windows Nano Server では使用できません。

また、Windows デスクトップ シェルが使用できない場合や応答しない場合は、任意の Windows システムでこのエラーが発生する可能性があります。 たとえば、サインオン時に、Windows デスクトップの準備が整う前に PowerShell ログオン スクリプトが実行を開始し、エラーが発生する可能性があります。

ByPass または AllSigned の実行ポリシーを使用しても、問題を回避するゾーン チェックは必要ありません。

こちらもご覧ください