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
の実行ポリシーを変更するには、Run as Administrator で 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-ExecutionPolicy
コマンドレットは、ExecutionPolicy パラメーターを使用して、RemoteSigned
ポリシーを指定します。 Scope パラメーターは、既定のスコープ値LocalMachine
を指定します。 実行ポリシー設定を表示するには、List パラメーターと共に Get-ExecutionPolicy
コマンドレットを使用します。
例 2: グループ ポリシーと競合する実行ポリシーを設定する
このコマンドは、 LocalMachine
スコープの実行ポリシーを Restricted
に設定しようとします。
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-ExecutionPolicy
コマンドレットは、ExecutionPolicy パラメーターを使用して、Restricted
ポリシーを指定します。 Scope パラメーターは、既定のスコープ値LocalMachine
を指定します。 Get-ChildItem
コマンドレットは、HKLM:
ドライブと共に Path パラメーターを使用してレジストリの場所を指定します。
例 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
Set-ExecutionPolicy
では、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:
Set-ExecutionPolicy
では、ExecutionPolicy パラメーターを使用して、RemoteSigned
ポリシーを指定します。 ポリシーは既定のスコープ ( LocalMachine
) に設定されます。
Get-ExecutionPolicy
コマンドレットは、RemoteSigned
が現在の PowerShell セッションの有効な実行ポリシーであることを示しています。
Start-ActivityTracker.ps1
スクリプトは、現在のディレクトリから実行されます。 スクリプトはデジタル署名されていないため、 RemoteSigned
によってブロックされます。
この例では、スクリプトのコードがレビューされ、安全に実行できるものとして検証されています。 Unblock-File
コマンドレットは、Path パラメーターを使用してスクリプトのブロックを解除します。
Unblock-File
が実行ポリシーを変更していないことを確認するには、Get-ExecutionPolicy
有効な実行ポリシーを表示RemoteSigned
。
Start-ActivityTracker.ps1
スクリプトは、現在のディレクトリから実行されます。 スクリプトは、 Unblock-File
コマンドレットによってブロック解除されたため、実行を開始します。
パラメーター
-Confirm
コマンドレットの実行前に確認を求めるメッセージが表示されます。
型: | SwitchParameter |
Aliases: | cf |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-ExecutionPolicy
実行ポリシーを指定します。 グループ ポリシーがなく、各スコープの実行ポリシーが Undefined
に設定されている場合、 Restricted
はすべてのユーザーに対して有効なポリシーになります。
許容される実行ポリシーの値は次のとおりです。
AllSigned
. すべてのスクリプトと構成ファイルが、ローカル コンピューターで記述されたスクリプトを含め、信頼できる発行元によって署名されている必要があります。Bypass
. 何もブロックされず、警告やプロンプトは表示されません。Default
. 既定の実行ポリシーを設定します。Restricted
Windows クライアント用または Windows サーバー用のRemoteSigned
。RemoteSigned
. インターネットからダウンロードしたすべてのスクリプトと構成ファイルが、信頼できる発行元によって署名されている必要があります。 Windows サーバー コンピューターに対する既定の実行ポリシー。Restricted
. 構成ファイルを読み込んだり、スクリプトを実行したりしません。 Windows クライアント コンピューター向けの既定の実行ポリシー。Undefined
. スコープに対して実行ポリシーが設定されていません。 グループ ポリシーによって設定されていないスコープから、割り当てられた実行ポリシーを削除します。 すべてのスコープの実行ポリシーがUndefined
場合、有効な実行ポリシーはRestricted
。Unrestricted
. PowerShell 6.0 以降では、これは Windows 以外のコンピューターの既定の実行ポリシーであり、変更することはできません。 すべての構成ファイルを読み込んで、すべてのスクリプトを実行します。 インターネットからダウンロードされた署名されていないスクリプトを実行すると、実行前にアクセス許可の入力を求められます。
型: | ExecutionPolicy |
指定可能な値: | AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted |
配置: | 0 |
規定値: | None |
必須: | True |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-Force
すべての確認プロンプトを非表示にします。 予期しない結果を回避するには、このパラメーターには注意してください。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Scope
実行ポリシーの影響を受けるスコープを指定します。 既定のスコープは LocalMachine
です。
有効な実行ポリシーは、次のように優先順位によって決定されます。
MachinePolicy
- コンピューターのすべてのユーザーのグループ ポリシーによって設定されるUserPolicy
- コンピューターの現在のユーザーのグループ ポリシーによって設定されるProcess
- 現在の PowerShell セッションにのみ影響しますLocalMachine
- コンピューターのすべてのユーザーに影響する既定のスコープCurrentUser
- 現在のユーザーにのみ影響を与える
Process
スコープは、現在の PowerShell セッションのみに影響します。 実行ポリシーは、レジストリではなく環境変数 $env:PSExecutionPolicyPreference
に保存されます。 PowerShell セッションが閉じられると、変数と値は削除されます。
CurrentUser
スコープの実行ポリシーは、レジストリ ハイブ HKEY_LOCAL_USER
に書き込まれます。
LocalMachine
スコープの実行ポリシーは、レジストリ ハイブ HKEY_LOCAL_MACHINE
に書き込まれます。
型: | ExecutionPolicyScope |
指定可能な値: | CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy |
配置: | 1 |
規定値: | LocalMachine |
必須: | False |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-WhatIf
コマンドレットの実行時に発生する内容を示します。 このコマンドレットは実行されません。
型: | SwitchParameter |
Aliases: | wi |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
入力
実行ポリシー オブジェクトをこのコマンドレットにパイプできます。
実行ポリシーの名前を含む文字列をこのコマンドレットにパイプできます。
出力
None
このコマンドレットは、出力を返しません。
メモ
Set-ExecutionPolicy
では、グループ ポリシーによって設定されるため、 MachinePolicy
スコープと UserPolicy
スコープは変更されません。
Set-ExecutionPolicy
は、ユーザー設定がポリシーよりも制限が厳しい場合でも、グループ ポリシーをオーバーライドしません。
グループ ポリシー スクリプトの実行時に戻る がコンピューターまたはユーザーに対して有効になっている場合、ユーザー設定は保存されますが、有効ではありません。 PowerShell には、競合を説明するメッセージが表示されます。
関連リンク
PowerShell