Set-ExecutionPolicy

Windows コンピューターの PowerShell 実行ポリシーを設定します。

構文

Set-ExecutionPolicy
   [-ExecutionPolicy] <ExecutionPolicy>
   [[-Scope] <ExecutionPolicyScope>]
   [-Force]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

説明

このコマンドレットは Set-ExecutionPolicy 、Windows コンピューターの PowerShell 実行ポリシーを変更します。 詳細については、「about_Execution_Policies」を参照してください。

Windows 以外のコンピューターの PowerShell 6.0 以降では、既定の実行ポリシーは Unrestricted 変更できません。 Set-ExecutionPolicy コマンドレットは使用可能ですが、PowerShell はサポートされていないというコンソール メッセージが表示されます。

実行ポリシーは、PowerShell セキュリティ戦略の一部です。 実行ポリシーによって、PowerShell プロファイルなどの構成ファイルを読み込めるか、スクリプトを実行できるかが決まります。 また、スクリプトを実行する前にデジタル署名する必要があるかどうか。

Set-ExecutionPolicyコマンドレットの既定のスコープは、LocalMachineコンピューターを使用するすべてのユーザーに影響します。 実行ポリシーLocalMachineを変更するには、管理istrator として実行を使用して PowerShell を起動します

各スコープの実行ポリシーを表示するには、次を使用 Get-ExecutionPolicy -Listします。 PowerShell セッションの有効な実行ポリシーを確認するには、パラメーターなしで使用 Get-ExecutionPolicy します。

例 1: 実行ポリシーを設定する

この例では、ローカル コンピューターの実行ポリシーを設定する方法を示します。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Get-ExecutionPolicy -List

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

このコマンドレットでは Set-ExecutionPolicyExecutionPolicy パラメーターを使用してポリシーを RemoteSigned 指定します。 Scope パラメーターはLocalMachine既定のスコープ値を指定します。 実行ポリシー設定を表示するには、List パラメーターを指定してGet-ExecutionPolicyコマンドレットを使用します。

例 2: グループ ポリシーと競合する実行ポリシーを設定する

このコマンドは、スコープの実行ポリシーRestrictedLocalMachine . LocalMachine は制限が厳しくなっていますが、グループ ポリシーと競合するため、有効なポリシーではありません。 ポリシーは Restricted レジストリ ハイブに書き込まれます HKEY_LOCAL_MACHINE

PS> Set-ExecutionPolicy -ExecutionPolicy Restricted -Scope LocalMachine

Set-ExecutionPolicy : PowerShell updated your local preference successfully, but the setting is
overridden by the Group Policy applied to your system. Due to the override, your shell will retain
its current effective execution policy of "AllSigned". Contact your Group Policy administrator for
more information. At line:1 char:20 + Set-ExecutionPolicy <<<< restricted

PS> Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds

    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds

Name                    Property
----                    --------
Microsoft.PowerShell    Path            : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
                        ExecutionPolicy : Restricted
ScriptedDiagnostics     ExecutionPolicy : Unrestricted

このコマンドレットでは Set-ExecutionPolicyExecutionPolicy パラメーターを使用してポリシーを Restricted 指定します。 Scope パラメーターはLocalMachine既定のスコープ値を指定します。 このコマンドレットでは Get-ChildItem 、ドライブと共に Path パラメーターを HKLM: 使用して、レジストリの場所を指定します。

例 3: リモート コンピューターからローカル コンピューターに実行ポリシーを適用する

このコマンドは、リモート コンピューターから実行ポリシー オブジェクトを取得し、ローカル コンピューターにポリシーを設定します。 Get-ExecutionPolicy は、 Microsoft.PowerShell.ExecutionPolicy オブジェクトをパイプラインの下に送信します。 Set-ExecutionPolicyはパイプライン入力を受け入れ、ExecutionPolicy パラメーターは必要ありません。

Invoke-Command -ComputerName Server01 -ScriptBlock { Get-ExecutionPolicy } | Set-ExecutionPolicy

コマンドレットはInvoke-Commandローカル コンピューターで実行され、ScriptBlock をリモート コンピューターに送信します。 ComputerName パラメーターはリモート コンピューター Server01 を指定します。 ScriptBlock パラメーターは、リモート コンピューターで実行されますGet-ExecutionPolicy オブジェクトは Get-ExecutionPolicy パイプラインの下に Set-ExecutionPolicy送信されます。 Set-ExecutionPolicy は、ローカル コンピューターの既定のスコープ LocalMachineに実行ポリシーを適用します。

例 4: 実行ポリシーのスコープを設定する

この例では、 CurrentUser指定したスコープの実行ポリシーを設定する方法を示します。 スコープは CurrentUser 、このスコープを設定するユーザーにのみ影響します。

Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope CurrentUser
Get-ExecutionPolicy -List

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

Set-ExecutionPolicy では、 ExecutionPolicy パラメーターを使用してポリシーを AllSigned 指定します。 Scope パラメーターで指定する値は次の値ですCurrentUser 実行ポリシー設定を表示するには、List パラメーターを指定してGet-ExecutionPolicyコマンドレットを使用します。

ユーザーの有効な実行ポリシーは AllSigned.

例 5: 現在のユーザーの実行ポリシーを削除する

この例では、実行ポリシーを Undefined 使用して、指定したスコープの実行ポリシーを削除する方法を示します。

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Get-ExecutionPolicy -List

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

Set-ExecutionPolicy では、 ExecutionPolicy パラメーターを使用してポリシーを Undefined 指定します。 Scope パラメーターで指定する値は次の値ですCurrentUser 実行ポリシー設定を表示するには、List パラメーターを指定してGet-ExecutionPolicyコマンドレットを使用します。

例 6: 現在の PowerShell セッションの実行ポリシーを設定する

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

Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope Process

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

ExecutionPolicy Set-ExecutionPolicy パラメーターを使用してポリシーをAllSigned指定します。 Scope パラメーターはProcessを指定します。 実行ポリシー設定を表示するには、List パラメーターを指定してGet-ExecutionPolicyコマンドレットを使用します。

例 7: 実行ポリシーを変更せずにスクリプトのブロックを解除して実行する

この例では、 RemoteSigned 実行ポリシーで署名されていないスクリプトを実行できないようにする方法を示します。

ベスト プラクティスは、スクリプトのコードを読み取り、コマンドレットを使用Unblock-Fileする前に安全であることを確認することです。 このコマンドレットは Unblock-File 、スクリプトを実行できるようにブロックを解除しますが、実行ポリシーは変更しません。

PS> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine

PS> Get-ExecutionPolicy

RemoteSigned

PS> .\Start-ActivityTracker.ps1

.\Start-ActivityTracker.ps1 : File .\Start-ActivityTracker.ps1 cannot be loaded.
The file .\Start-ActivityTracker.ps1 is not digitally signed.
The script will not execute on the system.
For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Start-ActivityTracker.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess

PS> Unblock-File -Path .\Start-ActivityTracker.ps1

PS> Get-ExecutionPolicy

RemoteSigned

PS> .\Start-ActivityTracker.ps1

Task 1:

ExecutionPolicy Set-ExecutionPolicy パラメーターを使用してポリシーをRemoteSigned指定します。 ポリシーは既定のスコープ LocalMachineに設定されます。

コマンドレットは Get-ExecutionPolicy 、現在の PowerShell セッションの有効な実行ポリシーであることを RemoteSigned 示しています。

スクリプトが Start-ActivityTracker.ps1 script is executed from the current directory. The script is blocked by デジタル署名されていないため、RemoteSigned' です。

この例では、スクリプトのコードがレビューされ、安全に実行できるものとして検証されています。 このコマンドレットではUnblock-File、Path パラメーターを使用してスクリプトのブロックを解除します。

実行ポリシーが変更されなかったことを Unblock-File 確認するには、 Get-ExecutionPolicy 有効な実行ポリシー RemoteSignedを表示します。

スクリプトは、 Start-ActivityTracker.ps1 現在のディレクトリから実行されます。 コマンドレットによってブロックが解除されたため、スクリプトの実行が Unblock-File 開始されます。

パラメーター

-Confirm

コマンドレットの実行前に確認を求めるメッセージが表示されます。

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ExecutionPolicy

実行ポリシーを指定します。 グループ ポリシーがなく、各スコープの実行ポリシーが設定 Undefinedされている場合は、 Restricted すべてのユーザーに対して有効なポリシーになります。

許容される実行ポリシーの値は次のとおりです。

  • AllSigned. すべてのスクリプトと構成ファイルが、ローカル コンピューターで記述されたスクリプトを含め、信頼できる発行元によって署名されている必要があります。
  • Bypass. 何もブロックされず、警告やプロンプトは表示されません。
  • Default. 既定の実行ポリシーを設定します。 Restricted Windows クライアントまたは RemoteSigned Windows サーバーの場合。
  • RemoteSigned. インターネットからダウンロードしたすべてのスクリプトと構成ファイルが、信頼できる発行元によって署名されている必要があります。 Windows サーバー コンピューターに対する既定の実行ポリシー。
  • Restricted. 構成ファイルを読み込んだり、スクリプトを実行したりしません。 Windows クライアント コンピューター向けの既定の実行ポリシー。
  • Undefined. スコープに対して実行ポリシーが設定されていません。 グループ ポリシーによって設定されていないスコープから、割り当てられた実行ポリシーを削除します。 すべてのスコープの実行ポリシーが次 Undefinedの場合、有効な実行ポリシーは Restricted.
  • Unrestricted. PowerShell 6.0 以降では、これは Windows 以外のコンピューターの既定の実行ポリシーであり、変更することはできません。 すべての構成ファイルを読み込んで、すべてのスクリプトを実行します。 インターネットからダウンロードされた署名されていないスクリプトを実行すると、実行前にアクセス許可の入力を求められます。
Type:ExecutionPolicy
Accepted values:AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Force

すべての確認プロンプトを非表示にします。 予期しない結果を回避するには、このパラメーターには注意してください。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Scope

実行ポリシーの影響を受けるスコープを指定します。 既定のスコープは LocalMachine.

有効な実行ポリシーは、次のように優先順位によって決定されます。

  • MachinePolicy - コンピューターのすべてのユーザーのグループ ポリシーによって設定される
  • UserPolicy - コンピューターの現在のユーザーのグループ ポリシーによって設定される
  • Process - 現在の PowerShell セッションにのみ影響します
  • LocalMachine - コンピューターのすべてのユーザーに影響する既定のスコープ
  • CurrentUser - 現在のユーザーにのみ影響を与える

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

スコープの CurrentUser 実行ポリシーは、レジストリ ハイブに書き込まれます HKEY_LOCAL_USER

スコープの LocalMachine 実行ポリシーは、レジストリ ハイブに書き込まれます HKEY_LOCAL_MACHINE

Type:ExecutionPolicyScope
Accepted values:CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy
Position:1
Default value:LocalMachine
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-WhatIf

コマンドレットの実行時に発生する内容を示します。 このコマンドレットは実行されません。

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

入力

ExecutionPolicy

実行ポリシー オブジェクトをこのコマンドレットにパイプできます。

String

実行ポリシーの名前を含む文字列をこのコマンドレットにパイプできます。

出力

None

このコマンドレットは、出力を返しません。

メモ

Set-ExecutionPolicyでは、グループ ポリシーによって設定されるため、スコープUserPolicyは変更MachinePolicyされません。

Set-ExecutionPolicy は、ユーザー設定がポリシーよりも制限が厳しい場合でも、グループ ポリシーをオーバーライドしません。

グループ ポリシー の [スクリプトの実行 を有効にする] がコンピューターまたはユーザーに対して有効になっている場合、ユーザー設定は保存されますが、有効ではありません。 PowerShell には、競合を説明するメッセージが表示されます。