Set-ExecutionPolicy
設定 Windows 電腦的 PowerShell 執行原則。
Syntax
Set-ExecutionPolicy
[-ExecutionPolicy] <ExecutionPolicy>
[[-Scope] <ExecutionPolicyScope>]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Description
Cmdlet 會 Set-ExecutionPolicy
變更 Windows 計算機的 PowerShell 執行原則。 如需詳細資訊,請參閱 about_Execution_Policies。
從非 Windows 電腦的 PowerShell 6.0 開始,預設執行原則是 Unrestricted
且無法變更。 Cmdlet Set-ExecutionPolicy
可供使用,但 PowerShell 會顯示不支援的控制台訊息。
執行原則是 PowerShell 安全性策略的一部分。 執行原則會決定您是否可以載入組態檔,例如 PowerShell 配置檔或執行腳本。 而且,腳本是否必須在執行之前以數位方式簽署。
Cmdlet 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
Cmdlet Set-ExecutionPolicy
會使用 ExecutionPolicy 參數來指定原則 RemoteSigned
。 Scope 參數會指定預設範圍值 LocalMachine
。 若要檢視執行原則設定,請使用 Get-ExecutionPolicy
Cmdlet 搭配 List 參數。
範例 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
Cmdlet Set-ExecutionPolicy
會使用 ExecutionPolicy 參數來指定原則 Restricted
。 Scope 參數會指定預設範圍值 LocalMachine
。 Cmdlet Get-ChildItem
會搭配HKLM:
磁碟驅動器使用Path參數來指定登錄位置。
範例 3:將執行原則從遠端電腦套用至本機計算機
此命令會從遠端電腦取得執行原則物件,並在本機計算機上設定原則。 Get-ExecutionPolicy
會在管線下傳送 Microsoft.PowerShell.ExecutionPolicy 物件。 Set-ExecutionPolicy
接受管線輸入,且不需要 ExecutionPolicy 參數。
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-ExecutionPolicy } | Set-ExecutionPolicy
Cmdlet 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
指定 。 若要檢視執行原則設定,請使用 Get-ExecutionPolicy
Cmdlet 搭配 List 參數。
使用者的有效執行原則會 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
指定 。 若要檢視執行原則設定,請使用 Get-ExecutionPolicy
Cmdlet 搭配 List 參數。
範例 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
。 若要檢視執行原則設定,請使用 Get-ExecutionPolicy
Cmdlet 搭配 List 參數。
範例 7:解除封鎖腳本以執行,而不變更執行原則
此範例示範執行原則如何 RemoteSigned
防止您執行未簽署的腳本。
最佳做法是先讀取腳本的程序代碼,並在使用 Unblock-File
Cmdlet 之前先確認其安全。 Cmdlet 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
所設定。
Cmdlet Get-ExecutionPolicy
會顯示 RemoteSigned
目前 PowerShell 工作階段的有效執行原則。
RemoteSigned Start-ActivityTracker.ps1 script is executed from the current directory. The script is blocked by
',因為腳本未以數位方式簽署。
在此範例中,腳本的程式代碼已檢閱並驗證為安全執行。 Cmdlet Unblock-File
會使用 Path 參數來解除封鎖腳本。
若要確認Unblock-File
未變更執行原則,Get-ExecutionPolicy
請顯示有效的執行原則 。 RemoteSigned
腳本 Start-ActivityTracker.ps1
會從目前目錄執行。 腳本會開始執行,因為它已由 Unblock-File
Cmdlet 解除封鎖。
參數
-Confirm
執行 Cmdlet 之前先提示您確認。
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
顯示執行 Cmdlet 後會發生的情況。 未執行 Cmdlet。
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
輸入
您可以使用管線將執行原則物件傳送至此 Cmdlet。
您可以使用管線將包含執行原則名稱的字串傳送至此 Cmdlet。
輸出
None
此 Cmdlet 不會傳回任何輸出。
備註
Set-ExecutionPolicy
不會變更 MachinePolicy
和 UserPolicy
範圍,因為它們是由組策略所設定。
Set-ExecutionPolicy
不會覆寫組策略,即使用戶喜好設定比原則更嚴格也一樣。
如果已為計算機或使用者啟用組策略 開啟腳本執行 ,則會儲存使用者喜好設定,但無效。 PowerShell 會顯示說明衝突的訊息。