Set-ExecutionPolicy
設定 Windows 電腦的 PowerShell 執行原則。
Syntax
Set-ExecutionPolicy
[-ExecutionPolicy] <ExecutionPolicy>
[[-Scope] <ExecutionPolicyScope>]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Description
Cmdlet 會 Set-ExecutionPolicy
變更 Windows 計算機的 PowerShell 執行原則。 如需詳細資訊,請參閱 about_Execution_Policies。
執行原則是 PowerShell 安全性策略的一部分。 執行原則會決定您是否可以載入組態檔,例如 PowerShell 配置檔或執行腳本。 此外,腳本是否必須在執行之前進行數字簽署。
Cmdlet Set-ExecutionPolicy
的預設範圍是 LocalMachine,會影響使用電腦的每個人。 若要變更 LocalMachine 的執行原則,請使用以 系統管理員身分執行 PowerShell 來啟動 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 較嚴格,但不是有效的原則,因為它與 群組原則 衝突。 限制原則會寫入登錄區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 參數來指定 受限制 的原則。 Scope 參數會指定預設範圍值 LocalMachine。
Cmdlet Get-ChildItem
會搭配 HKLM 提供者使用 Path 參數來指定登錄位置。
範例 3:將執行原則從遠端電腦套用至本機計算機
此命令會從遠端電腦取得執行原則物件,並在本機計算機上設定原則。 Get-ExecutionPolicy
會在管線下傳送 Microsoft.PowerShell.ExecutionPolicy 物件。 Set-ExecutionPolicy
接受管線輸入,而且不需要 ExecutionPolicy 參數。
PS> 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:移除目前使用者的執行原則
此範例示範如何使用 未定義的 執行原則來移除指定範圍的執行原則。
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RemoteSigned
Set-ExecutionPolicy
會使用 ExecutionPolicy 參數來指定 未定義 的原則。
Scope 參數會指定 CurrentUser。 若要檢視執行原則設定,請使用 Get-ExecutionPolicy
Cmdlet 搭配 List 參數。
範例 6:設定目前 PowerShell 工作階段的執行原則
進程範圍只會影響目前的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 會話的有效執行原則。
Start-ActivityTracker.ps1 文稿是從當前目錄執行。 腳本遭到 RemoteSigned 封鎖,因為腳本未經過數字簽署。
在此範例中,腳本的程式代碼已檢閱並驗證為安全執行。 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
指定執行原則。 如果沒有組策略,而且每個範圍的執行原則都設定為 [未定義], 則 [限制 ] 會成為所有使用者的有效原則。
可接受的執行原則值如下所示:
- AllSigned。 要求所有腳本和組態檔都是由受信任的發行者簽署,包括本機計算機上撰寫的腳本。
- Bypass。 不會封鎖任何項目,且不會顯示警告或提示。
- Default。 設定預設執行原則。 適用於 Windows 用戶端或 Windows 伺服器的 RemoteSigned 限制。
- RemoteSigned。 要求從因特網下載的所有腳本和配置檔都由受信任的發行者簽署。 Windows 伺服器電腦的預設執行原則。
- Restricted。 不會載入組態檔或執行腳本。 默認執行原則 Windows 用戶端電腦。
- Undefined。 未針對範圍設定執行原則。 從未由 群組原則 設定的範圍中移除指派的執行原則。 如果所有範圍內的執行原則為 [未定義],則有效的執行原則為 [限制]。
- Unrestricted。 載入所有設定檔並執行所有指令碼。 如果您執行從網際網路下載且未經簽署的指令碼,在執行前會提示您需要執行權限。
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: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Scope
指定受執行原則影響的範圍。 默認範圍為 LocalMachine。
有效的執行原則取決於優先順序,如下所示:
- MachinePolicy。 為電腦的所有用戶設定 群組原則。
- UserPolicy。 由電腦目前使用者的 群組原則 設定。
- 進程。 只會影響目前的PowerShell會話。
- CurrentUser。 只會影響目前的使用者。
- LocalMachine。 影響計算機所有用戶的預設範圍。
進程範圍只會影響目前的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 |
輸入
Microsoft.PowerShell.ExecutionPolicy, System.String
您可以使用管線將執行原則物件或包含執行原則名稱的字串傳送至 Set-ExecutionPolicy
。
輸出
None
Set-ExecutionPolicy
不會傳回任何輸出。
備註
Set-ExecutionPolicy
不會變更 MachinePolicy 和 UserPolicy 範圍,因為它們是由組策略所設定。
Set-ExecutionPolicy
不會覆寫 群組原則,即使用戶喜好設定比原則更嚴格也一樣。
如果已為計算機或使用者啟用 [開啟腳本執行] 群組原則,則會儲存使用者喜好設定,但無效。 PowerShell 會顯示說明衝突的訊息。