実行ポリシーについて
簡単な説明
PowerShell の実行ポリシーについて説明し、その管理方法について説明します。
長い説明
PowerShell の実行ポリシーは、PowerShell が構成ファイルを読み込み、スクリプトを実行するときの条件を制御する安全性機能です。 この機能は、悪意のあるスクリプトの実行を防止するのに役立ちます。
Windows コンピューターでは、ローカルコンピューター、現在のユーザー、または特定のセッションの実行ポリシーを設定できます。 グループポリシー設定を使用して、コンピューターとユーザーの実行ポリシーを設定することもできます。
ローカルコンピューターと現在のユーザーの実行ポリシーは、レジストリに格納されます。 PowerShell プロファイルで実行ポリシーを設定する必要はありません。 特定のセッションの実行ポリシーはメモリにのみ格納され、セッションが閉じられると失われます。
実行ポリシーは、ユーザーの操作を制限するセキュリティシステムではありません。 たとえば、スクリプトを実行できない場合、ユーザーはコマンドラインでスクリプトの内容を入力することで、ポリシーを簡単にバイパスできます。 代わりに、実行ポリシーを使用して、ユーザーが基本的な規則を設定し、意図せずに違反しないようにすることができます。
PowerShell 実行ポリシー
PowerShell の実行ポリシーは次のとおりです。
AllSigned
- スクリプトを実行できます。
- ローカル コンピューター上に記述するスクリプトを含め、すべてのスクリプトと構成ファイルが信頼された発行元によって署名されている必要があります。
- 信頼済みまたは信頼できないものとして分類されていない発行元からのスクリプトを実行する前に、プロンプトを表示します。
- 署名されたが悪意のあるスクリプトを実行するリスク。
バイパス
- 何もブロックされず、警告やプロンプトは表示されません。
- この実行ポリシーは、PowerShell スクリプトが大規模なアプリケーションに組み込まれる構成や、PowerShell が独自のセキュリティモデルを持つプログラムの基礎となる構成用に設計されています。
Default
- 既定の実行ポリシーを設定します。
- Windows クライアントでは制限されています。
- Windows サーバーの場合はRemoteSigned 。
RemoteSigned
- Windows server コンピューターの既定の実行ポリシー。
- スクリプトを実行できます。
- では、電子メールやインスタントメッセージングプログラムを含む、インターネットからダウンロードされるスクリプトと構成ファイルに対する信頼された発行元からのデジタル署名が必要です。
- では、ローカルコンピューター上に記述され、インターネットからダウンロードされないスクリプトに対してデジタル署名は必要ありません。
- コマンドレットなどを使用して、スクリプトのブロックが解除された場合に、インターネットからダウンロードされ、署名されていないスクリプトを実行し
Unblock-File
ます。 - インターネット以外のソースから署名されていないスクリプトを実行したり、悪意のあるスクリプトに署名したりするリスク。
制限付き
- Windows クライアントコンピューターの既定の実行ポリシー。
- 個々のコマンドを許可しますが、スクリプトは許可しません。
- 書式設定ファイル、構成ファイル ()
.ps1xml
、モジュールスクリプトファイル ()、PowerShell プロファイル () など、すべてのスクリプトファイルの実行を禁止.psm1
.ps1
します。
未定義
- 現在のスコープには実行ポリシーが設定されていません。
- すべてのスコープの実行ポリシーが定義されていない場合は、有効な実行ポリシーが制限されます。これは、既定の実行ポリシーです。
無制限
- Windows 以外のコンピューターの既定の実行ポリシーを変更することはできません。
- 署名されていないスクリプトを実行できます。 悪意のあるスクリプトを実行するリスクがあります。
- ローカルイントラネットゾーンからのものではないスクリプトと構成ファイルを実行する前に、ユーザーに警告します。
注意
インターネットパスから汎用名前付け規則 (UNC) パスを区別しないシステムでは、UNC パスによって識別されるスクリプトは、 RemoteSigned実行ポリシーでの実行が許可されていない可能性があります。
実行ポリシーのスコープ
特定のスコープでのみ有効な実行ポリシーを設定できます。
スコープの有効な値は 、machinepolicy、 userpolicy、 Process、 CurrentUser、およびLocalMachineです。 LocalMachineは、実行ポリシーを設定するときの既定値です。
スコープ値は、優先順位順に一覧表示されます。 より制限の厳しいポリシーが優先順位の低いレベルで設定されている場合でも、現在のセッションでは、優先されるポリシーが有効になります。
詳細については、「 set-executionpolicy」を参照してください。
MachinePolicy
コンピューターのすべてのユーザーに対してグループポリシーによって設定されます。
UserPolicy
コンピューターの現在のユーザーのグループポリシーによって設定されます。
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になります。
特定のスコープに対して設定された実行ポリシーを取得するには、のscopeパラメーターを使用し Get-ExecutionPolicy
ます。
たとえば、次のコマンドは、 CurrentUserスコープの実行ポリシーを取得します。
Get-ExecutionPolicy -Scope CurrentUser
実行ポリシーを変更する
Windows コンピューターの PowerShell 実行ポリシーを変更するには、コマンドレットを使用し Set-ExecutionPolicy
ます。 変更はすぐに有効になります。 PowerShell を再起動する必要はありません。
スコープLocalMachineまたはCurrentUserの実行ポリシーを設定した場合、変更はレジストリに保存され、再度変更するまで有効のままになります。
プロセススコープの実行ポリシーを設定しても、レジストリには保存されません。 実行ポリシーは、現在のプロセスと子プロセスが閉じられるまで保持されます。
注意
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
スコープの実行ポリシーを削除するには、次のようにします。
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
どのスコープにも実行ポリシーが設定されていない場合は、有効な実行ポリシーが制限されます。これは、Windows クライアントの既定の設定です。
1つのセッションに対して別のポリシーを設定する
powershell.exeのset-executionpolicyパラメーターを使用して、新しい PowerShell セッションの実行ポリシーを設定できます。 ポリシーは、現在のセッションと子セッションにのみ影響します。
新しいセッションの実行ポリシーを設定するには、コマンドライン ( cmd.exeや powershell など) で powershell を起動し、 powershell.exeのset-executionpolicyパラメーターを使用して実行ポリシーを設定します。
次に例を示します。
powershell.exe -ExecutionPolicy AllSigned
設定した実行ポリシーはレジストリに格納されていません。 代わりに、環境変数に格納され $env:PSExecutionPolicyPreference
ます。 変数は、ポリシーが設定されているセッションを閉じると削除されます。 変数の値を編集することによって、ポリシーを変更することはできません。
セッション中に、セッションに対して設定されている実行ポリシーが、ローカルコンピューターまたは現在のユーザーのレジストリで設定されている実行ポリシーよりも優先されます。 ただし、グループポリシーを使用して設定された実行ポリシーより優先されることはありません。
グループポリシーを使用して実行ポリシーを管理する
[スクリプトのグループポリシー実行を有効にする] 設定を使用すると、企業内のコンピューターの実行ポリシーを管理できます。 グループポリシー設定は、すべてのスコープの PowerShell で設定されている実行ポリシーよりも優先されます。
[スクリプト実行の有効化] ポリシー設定は次のとおりです。
[スクリプトの実行を有効にする] を無効にした場合、スクリプトは実行されません。 これは、制限された実行ポリシーに相当します。
[スクリプトの実行を有効にする] を有効にした場合は、実行ポリシーを選択できます。 グループポリシー設定は、次の実行ポリシー設定と同じです。
グループ ポリシー 実行ポリシー すべてのスクリプトを許可する 無制限 ローカル スクリプトおよびリモートの署名済みスクリプトを許可する RemoteSigned 署名済みスクリプトのみ許可する AllSigned [スクリプトの実行を有効にする] が構成されていない場合、効果はありません。 PowerShell で設定された実行ポリシーが有効になります。
PowerShellExecutionPolicy ファイルと PowerShellExecutionPolicy ファイルは、次のパスのグループポリシーエディターの [コンピューターの構成] ノードと [ユーザーの構成] ノードに [スクリプト実行を有効にする] ポリシーを追加します。
Windows XP および Windows Server 2003 の場合:
管理用テンプレート \Windows コンポーネント \Windows PowerShell
Windows Vista 以降のバージョンの場合:
管理 Templates\Classic 管理用テンプレート
Windows \Windows PowerShell
[コンピュータの構成」ノードで設定されたポリシーは、[ユーザーの構成」ノードで設定されたポリシーよりも優先されます。
詳細については、「about_Group_Policy_Settings」をご覧ください。
実行ポリシーの優先順位
PowerShell は、セッションの有効な実行ポリシーを決定するときに、次の優先順位で実行ポリシーを評価します。
- グループポリシー: MachinePolicy
- グループポリシー: UserPolicy
- 実行ポリシー: Process (または
powershell.exe -ExecutionPolicy
) - 実行ポリシー: CurrentUser
- 実行ポリシー: LocalMachine
署名されたスクリプトと署名されていないスクリプトの管理
PowerShell の実行ポリシーがRemoteSignedの場合、powershell では、電子メールやインスタントメッセージングプログラムを含む、インターネットからダウンロードされた未署名のスクリプトは実行されません。
スクリプトに署名するか、実行ポリシーを変更せずに、署名されていないスクリプトを実行することができます。
PowerShell 3.0 以降では、コマンドレットのStreamパラメーターを使用して、 Get-Item
インターネットからダウンロードされたためにブロックされているファイルを検出することができます。 Unblock-File
コマンドレットを使用してスクリプトのブロックを解除し、PowerShell で実行できるようにします。
詳細については、「 about_Signing、取得項目、およびブロック解除-ファイル」を参照してください。