Set-ExecutionPolicy
設定 Windows 電腦的 PowerShell 執行策略。
語法
All
Set-ExecutionPolicy
[-ExecutionPolicy] <ExecutionPolicy>
[[-Scope] <ExecutionPolicyScope>]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Description
Set-ExecutionPolicy 指令檔會更改 Windows 電腦的 PowerShell 執行策略。 如需詳細資訊,請參閱 about_Execution_Policies。
從 PowerShell 6.0 開始,非 Windows 電腦的預設執行策略為 Unrestricted,且無法更改。
Set-ExecutionPolicy Cmdlet 可供使用,但 PowerShell 會顯示不支援的控制台訊息。
執行策略是 PowerShell 安全策略的一部分。 執行策略決定你是否能載入設定檔,例如你的 PowerShell 設定檔,或執行腳本。 還有,劇本是否必須數位簽名。
Set-ExecutionPolicy指令長的預設範圍是 LocalMachine,影響所有使用電腦的人。 要更改執行 LocalMachine策略,請以 管理員身份執行 PowerShell。
要顯示每個作用域的執行策略,請使用 Get-ExecutionPolicy -List。 要查看 PowerShell 會話的 Get-ExecutionPolicy 有效執行策略,且無需參數即可。
Note
執行策略也可以由群組原則設定。 若設定了群組原則,則會覆蓋本地的執行策略。 Windows PowerShell 5.1 和 PowerShell 6.0 及以上版本會將執行政策設定存放在不同位置,並且分別管理。 Windows PowerShell 的powershell.exe設定()不會影響 PowerShell(pwsh.exe)。
範例
範例 1:設定執行策略
這個範例展示了如何設定本地電腦的執行政策。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser RemoteSigned
LocalMachine RemoteSigned
Set-ExecutionPolicy指令長 ExecutionTPolicy 參數來指定該政策。RemoteSigned
Scope 參數指定預設範圍值 LocalMachine。 要查看執行政策設定,請使用 帶有 Get-ExecutionPolicy 參數的 cmdlet。
範例 2:設定與群組政策衝突的執行政策
此指令嘗試將作用域的執行策略設定 LocalMachine 為 Restricted。
LocalMachine 雖然限制較多,但因為與群組政策衝突,因此並非有效的政策。
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
範例 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。 要查看執行政策設定,請使用 帶有 Get-ExecutionPolicy 參數的 cmdlet。
使用者的有效執行策略變為 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。
範例 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。
範例 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 是從目前目錄執行的。 腳本開始執行是因為 cmdlet 解阻 Unblock-File 了它。
參數
-Confirm
在執行 Cmdlet 之前,提示您進行確認。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | 參見 |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-ExecutionPolicy
指定執行策略。 若沒有群組策略,且每個範圍的執行政策設定為 Undefined,則 Restricted 成為所有使用者的有效策略。
可接受的執行策略值如下:
-
AllSigned。 要求所有腳本與設定檔必須由受信任的發佈者簽署,包括在本地電腦撰寫的腳本。 -
Bypass。 未封鎖任何專案,而且沒有任何警告或提示。 -
Default。 設定預設執行原則。 Windows 用戶端用Restricted,Windows 伺服器用RemoteSigned。 -
RemoteSigned。 要求所有從網際網路下載的腳本和設定檔都必須由受信任的發佈者簽署。 Windows 伺服器電腦的預設執行原則。 -
Restricted。 無法載入設定檔或執行腳本。 Windows 用戶端電腦的預設執行原則。 -
Undefined。 範圍區沒有設定執行政策。 移除未由群組政策設定的範圍內的指定執行政策。 若所有作用域的執行策略均為Undefined,則有效執行策略為Restricted。 -
Unrestricted。 從 PowerShell 6.0 開始,這成為非 Windows 電腦的預設執行策略,且無法更改。 載入所有設定檔並執行所有腳本。 如果你執行一個從網路下載的未簽名腳本,執行前會要求你取得許可。
參數屬性
| 類型: | ExecutionPolicy |
| 預設值: | None |
| 接受的值: | AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | True |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Force
會抑制所有確認提示。 使用此參數時需謹慎,以避免意外結果。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Scope
指定受執行政策影響的範圍。 預設範圍為 LocalMachine。 參數接受以下數值:
-
MachinePolicy- 由群組政策為所有電腦使用者設定 -
UserPolicy- 由群組原則為目前電腦使用者設定 -
Process- 僅影響目前的 PowerShell 會話 -
CurrentUser- 僅影響目前使用者 -
LocalMachine- 影響所有電腦使用者的預設範圍
Note
MachinePolicy 並 UserPolicy 由群組政策設定。 如果你嘗試將作用域設為這些值之一,PowerShell 會顯示錯誤訊息,表示範圍是由群組原則設定且無法更改。
若執行政策未由群組政策定義,有效執行策略依優先順序決定如下:
-
Process- 最高優先權 -
CurrentUser- 第二高優先權 -
LocalMachine- 最低優先權
請參閱 NOTES 章節,了解 PowerShell 如何儲存執行策略的更多資訊。
參數屬性
| 類型: | ExecutionPolicyScope |
| 預設值: | LocalMachine |
| 接受的值: | CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | 1 |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | True |
| 來自剩餘引數的值: | False |
-WhatIf
顯示 Cmdlet 執行時會發生什麼事。 該 Cmdlet 未被執行。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | 威斯康辛 |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
CommonParameters
此 cmdlet 支援常見參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters。
輸入
ExecutionPolicy
你可以將執行策略物件管道連接到這個 cmdlet。
String
你可以將包含執行策略名稱的字串輸入這個 cmdlet。
輸出
None
此 Cmdlet 不會傳回任何輸出。
備註
Set-ExecutionPolicy 無法更改 MachinePolicy AND UserPolicy 範圍,因為它們是由群組政策設定的。
Set-ExecutionPolicy 即使使用者偏好比政策更嚴格,也不會覆寫群組政策。
若執行政策未由群組政策定義,有效執行策略依優先順序決定如下:
-
Process- 最高優先權。Process範圍只會影響目前的 PowerShell 工作階段。 執行原則會儲存在環境變數$Env:PSExecutionPolicyPreference中,而不是登錄中。 關閉 PowerShell 工作階段時,會刪除變數和值。 -
CurrentUser- 第二高優先權。 設定儲存在使用者專屬powershell.config.json檔案中。 -
LocalMachine- 最低優先權。 設定會儲存在檔案中$PSHOME/powershell.config.json。
欲了解更多檔案資訊 powershell.config.json ,請參見 about_PowerShell_Config。