about_Execution_Policies

適用対象: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0

トピック

about_Execution_Policies

概要

Windows PowerShell® の実行ポリシーとその管理方法について説明します。

詳細説明

Windows PowerShell の実行ポリシーを使用して、Windows PowerShell によって構成ファイルが読み込まれてスクリプトが実行される条件を決定できます。

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

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

実行ポリシーはユーザーの操作を制限するセキュリティ システムではありません。たとえば、ユーザーはスクリプトを実行できないとき、コマンド ラインでスクリプトの内容を入力すると、容易にポリシーを回避できます。一方で、実行ポリシーを使用して基本的な規則を設定することで、意図せずに違反することを防止することができます。

Windows PowerShell の実行ポリシー

Windows PowerShell の実行ポリシーは次のとおりです。

"Restricted" が既定のポリシーです。

Restricted

- Windows 8、Windows Server 2012、Windows 8.1 の既定の実行ポリシーです。

- 個別のコマンドは許可されますが、スクリプトは実行されません。

- 書式設定と構成のファイル (.ps1xml)、モジュール スクリプト ファイル (.psm1)、Windows PowerShell プロファイル (.ps1) を含むすべてのスクリプト ファイルの実行を防止します。

AllSigned

- スクリプトを実行できます。

- ローカル コンピューター上で記述されたスクリプトを含むすべてのスクリプトと構成ファイルが、信頼された発行元によって署名されている必要があります。

- 信頼されているかどうかがまだ分類されていない発行元のスクリプトを実行する前に、確認メッセージが表示されます。

- 署名されているが悪意のあるスクリプトが実行される危険性があります。

RemoteSigned

- スクリプトを実行できます。Windows Server 2012 R2 の既定の実行ポリシーです。

- インターネット (電子メールとインスタント メッセージング プログラムを含む) からダウンロードされたスクリプトと構成ファイルが、信頼された発行元によってデジタル署名されている必要があります。

- ローカル コンピューター上で記述された (インターネットからダウンロードされていない) スクリプトには、デジタル署名は必要ありません。

- Unblock-File コマンドレットの使用などによってスクリプトのブロックが解除されている場合は、インターネットからダウンロードされた、署名されていないスクリプトが実行されます。

- インターネット以外をソースとする署名されていないスクリプトや、署名されているが悪意のあるスクリプトが実行される危険性があります。

Unrestricted

- 署名されていないスクリプトを実行できます (悪意のあるスクリプトが実行される危険性があります)。

- インターネットからダウンロードされたスクリプトや構成ファイルを実行する前に、ユーザーに警告します。

Bypass

- 何もブロックされません。警告やプロンプトは表示されません。

- この実行ポリシーは、Windows PowerShell のスクリプトが大きいアプリケーションに組み込まれている構成や、Windows PowerShell が独自のセキュリティ モデルを持つプログラムの基盤になっている構成を対象としています。

Undefined

- 現在のスコープに実行ポリシーが設定されていません。

- すべてのスコープの実行ポリシーが Undefined の場合、有効な実行ポリシーは、既定の実行ポリシーである Restricted になります。

注記:インターネット パスと汎用名前付け規則 (UNC) パスを区別しないシステムの場合、RemoteSigned 実行ポリシーを使用すると、UNC パスで識別されているスクリプトが実行を許可されない可能性があります。

実行ポリシーのスコープ

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

Scope の有効な値は、Process、CurrentUser、LocalMachine です。実行ポリシーを設定するときの既定値は LocalMachine です。

Scope の値を優先順位の順に示します。

- Process

実行ポリシーは、現在のセッション (現在の Windows PowerShell のプロセス) のみに影響を与えます。

実行ポリシーは、レジストリではなく、$env:PSExecutionPolicyPreference 環境変数に保存され、セッションが閉じられると削除されます。変数の値を編集してポリシーを変更することはできません。

- CurrentUser

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

- LocalMachine

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

より制限の厳しいポリシーが優先順位の低いレベルで設定されていても、現在のセッションでは優先順位の高いポリシーが有効になります。

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

実行ポリシーを取得する

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

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

Get-ExecutionPolicy    

現在のセッションに影響を与えるすべての実行ポリシーを取得し、優先順位の順に表示するには、次のように入力します。

        Get-ExecutionPolicy -List

結果は次のサンプル出力のようになります。

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

この例では、現在のユーザーの実行ポリシーがローカル コンピューターに設定されている実行ポリシーより優先されるため、有効な実行ポリシーは RemoteSigned になります。

特定のスコープに設定されている実行ポリシーを取得するには、Get-ExecutionPolicy の Scope パラメーターを使用します。

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

        Get-ExecutionPolicy -Scope CurrentUser
        

実行ポリシーを変更する

コンピューター上の Windows PowerShell の実行ポリシーを変更するには、Set-ExecutionPolicy コマンドレットを使用します。

変更はすぐに有効になります。Windows PowerShell を再起動する必要はありません。

ローカル コンピューター (既定値) または現在のユーザーに実行ポリシーを設定した場合、変更内容はレジストリに保存され、再度変更されるまで有効です。

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

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

実行ポリシーを変更するには、次のように入力します。

        Set-ExecutionPolicy -ExecutionPolicy <PolicyName>

たとえば、次のように入力します。

        Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

特定のスコープに実行ポリシーを設定するには、次のように入力します。

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

たとえば、次のように入力します。

        Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

実行ポリシーを変更するコマンドは正常に実行されますが、有効な実行ポリシーはまだ変更されません。

たとえば、ローカル コンピューターに実行ポリシーを設定するコマンドは正常に実行されますが、現在のユーザーの実行ポリシーで上書きされます。

実行ポリシーを削除する

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

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

        Set-ExecutionPolicy Undefined

あるいは、次にように入力します。

        Set-ExecutionPolicy Undefined -scope LocalMachine

どのスコープにも実行ポリシーが設定されていない場合、有効な実行ポリシーは、既定値である Restricted になります。

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

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

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

たとえば、次のように入力します。

PowerShell.exe -ExecutionPolicy AllSigned

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

セッション中は、そのセッションに設定されている実行ポリシーが、レジストリ内にあるローカル コンピューターまたは現在のユーザーに設定されている実行ポリシーより優先されます。ただし、グループ ポリシー設定を使用して設定された実行ポリシー設定 (後で説明します) の方が優先されます。

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

"スクリプトの実行を有効にする" グループ ポリシー設定を使用して、社内のコンピューターの実行ポリシーを管理できます。グループ ポリシー設定によって、すべてのスコープに Windows PowerShell で設定された実行ポリシーが上書きされます。

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

-- "スクリプトの実行を有効にする" を無効にした場合、スクリプトは実行されません。これは、"Restricted" 実行ポリシーに相当します。

-- "スクリプトの実行を有効にする" を有効にした場合、実行ポリシーを選択できます。グループ ポリシー設定は、次の実行ポリシーの設定に相当します。

        Group Policy                Execution Policy  
        ------------                ----------------
        Allow all scripts.          Unrestricted

        Allow local scripts         RemoteSigned
        and remote signed
        scripts. 

        Allow only signed           AllSigned
        scripts.

-- "スクリプトの実行を有効にする" が構成されていない場合、影響はありません。Windows PowerShell で設定された実行ポリシーが有効です。

PowerShellExecutionPolicy.adm ファイルと PowerShellExecutionPolicy.admx ファイルによって、次のパスにあるグループ ポリシー エディター内の "コンピューターの構成" ノードと "ユーザーの構成" ノードに "スクリプトの実行を有効にする" ポリシーが追加されます。

        For Windows XP and Windows Server 2003:
        Administrative Templates\Windows Components\Windows PowerShell

        For Windows Vista and later versions of Windows:
        Administrative Templates\Classic Administrative Templates\
        Windows Components\Windows PowerShell

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

PowerShellExecutionPolicy.adm ファイルは、Microsoft ダウンロード センターで入手できます。詳細については、Windows PowerShell の管理用テンプレートに関するページ (https://go.microsoft.com/fwlink/?LinkId=131786) を参照してください。

詳細については、「about_Group_Policy_Settings」(https://go.microsoft.com/fwlink/?LinkID=251696) を参照してください。

実行ポリシーの優先順位

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

        - Group Policy: Computer Configuration
        - Group Policy: User Configuration
        - Execution Policy: Process (or PowerShell.exe -ExecutionPolicy)
        - Execution Policy: CurrentUser
        - Execution Policy: LocalMachine    

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

Windows PowerShell の実行ポリシーが RemoteSigned の場合、Windows PowerShell では、インターネット (電子メールやインスタント メッセージング プログラムなど) からダウンロードされた未署名のスクリプトは実行されません。

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

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

詳細については、「about_Signing」、「Get-Item」、「Unblock-File」を参照してください。

関連項目

about_Environment_Variables

about_Signing

Get-ExecutionPolicy

Set-ExecutionPolicy

Get-Item

Unblock-File

Windows PowerShell の管理用テンプレート

(https://go.microsoft.com/fwlink/?LinkId=131786)

PowerShell.exe コンソール ヘルプ

(https://go.microsoft.com/fwlink/?LinkID=113439)