about_Execution_Policies
簡単な説明
PowerShell 実行ポリシーについて説明し、それらを管理する方法について説明します。
長い説明
PowerShell の実行ポリシーは、PowerShell が構成ファイルを読み込み、スクリプトを実行する条件を制御する安全機能です。 この機能は、悪意のあるスクリプトの実行を防止します。
Windows コンピューターでは、ローカル コンピューター、現在のユーザー、または特定のセッションの実行ポリシーを設定できます。 グループ ポリシー設定を使用して、コンピューターとユーザーの実行ポリシーを設定することもできます。
ローカル コンピューターと現在のユーザーの実行ポリシーは、レジストリに格納されます。 PowerShell プロファイルで実行ポリシーを設定する必要はありません。 特定のセッションの実行ポリシーはメモリにのみ格納され、セッションが閉じられると失われます。
実行ポリシーは、ユーザー アクションを制限するセキュリティ システムではありません。 たとえば、ユーザーは、スクリプトを実行できないときにコマンド ラインにスクリプトの内容を入力することで、ポリシーを簡単にバイパスできます。 代わりに、実行ポリシーは、ユーザーが基本ルールを設定し、意図せずに違反しないようにするのに役立ちます。
Windows 以外のコンピューターでは、既定の実行ポリシーは であり Unrestricted 、変更できません。 コマンドレットは Set-ExecutionPolicy
使用できますが、PowerShell ではサポートされていないことを示すコンソール メッセージが表示されます。 Get-ExecutionPolicy
Windows 以外のUnrestrictedプラットフォームでは が返されますが、これらのプラットフォームでは 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
- 現在のスコープには実行ポリシーが設定されません。
- すべてのスコープの実行ポリシーが の Undefined場合、有効な実行ポリシーは Windows クライアント用で、Windows Server の場合は RestrictedRemoteSigned です。
Unrestricted
- Windows 以外のコンピューターの既定の実行ポリシー。変更することはできません。
- 署名されていないスクリプトを実行できます。 悪意のあるスクリプトを実行するリスクがあります。
- ローカル イントラネット ゾーンからではないスクリプトと構成ファイルを実行する前に、ユーザーに警告します。
Note
汎用名前付け規則 (UNC) パスをインターネット パスと区別しないシステムでは、UNC パスで識別されるスクリプトを RemoteSigned 実行ポリシーで実行できない場合があります。
実行ポリシー スコープ
特定のスコープでのみ有効な実行ポリシーを設定できます。
の有効な値Scopeは、MachinePolicy、UserPolicy、ProcessCurrentUser、LocalMachine です。 実行ポリシーを設定するときの既定値は 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 場合、レジストリには保存されません。 実行ポリシーは、現在のプロセスと子プロセスが閉じられるまで保持されます。
Note
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
使用して、インターネットからダウンロードされたためにブロックされているファイルを検出できます。 コマンドレットを Unblock-File
使用してスクリプトのブロックを解除し、PowerShell でスクリプトを実行できるようにします。
詳細については、「 about_Signing、 Get-Item、 および Unblock-File」を参照してください。
Note
ファイルをダウンロードする他の方法では、ファイルがインターネット ゾーンからのファイルとしてマークされない場合があります。 次に例をいくつか示します。
curl.exe
Invoke-RestMethod
Invoke-WebRequest
Windows Server Core と Window 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 シェルは、Windows Server Core および Windows Nano Server では使用できません。
また、Windows デスクトップ シェルが使用できない場合や応答しない場合は、任意の Windows システムでこのエラーが発生する可能性があります。 たとえば、サインオン時に、Windows デスクトップの準備が整う前に PowerShell ログオン スクリプトが実行を開始し、エラーが発生する可能性があります。
ByPass または AllSigned の実行ポリシーを使用する場合、問題を回避するゾーン チェックは必要ありません。