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