Set-ExecutionPolicy
設定 Windows 電腦的 PowerShell 執行原則。
語法
All
Set-ExecutionPolicy
[-ExecutionPolicy] <ExecutionPolicy>
[[-Scope] <ExecutionPolicyScope>]
[-Force]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Description
Set-ExecutionPolicy Cmdlet 會變更 Windows 電腦的 PowerShell 執行原則。 如需詳細資訊,請參閱 about_Execution_Policies。
執行原則是 PowerShell 安全性策略的一部分。 執行原則會決定您是否可以載入組態檔,例如 PowerShell 配置檔或執行腳本。 還有,劇本是否必須數位簽名。
Set-ExecutionPolicy Cmdlet 的預設範圍是 LocalMachine,這會影響使用計算機的每個人。 若要變更 LocalMachine的執行原則,請使用 以系統管理員身分執行 PowerShell啟動 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 Cmdlet 會使用 ExecutionPolicy 參數來指定 RemoteSigned 原則。
Scope 參數會指定預設範圍值,LocalMachine。 若要檢視執行原則設定,請使用 Get-ExecutionPolicy Cmdlet 搭配 List 參數。
範例 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 Cmdlet 會在本機電腦上執行,並將 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 執行原則如何防止您執行未簽署的腳本。
最佳做法是讀取腳本的程序代碼,並在使用 Cmdlet Unblock-File。
Unblock-File Cmdlet 會解除封鎖腳本,使其可以執行,但不會變更執行原則。
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 Cmdlet 顯示 RemoteSigned 是目前 PowerShell 會話的有效執行原則。
Start-ActivityTracker.ps1 文稿會從目前目錄執行。 腳本會遭到 RemoteSigned 封鎖,因為腳本未經過數字簽署。
在此範例中,腳本的程式代碼已檢閱並驗證為安全執行。
Unblock-File Cmdlet 會使用 Path 參數來解除封鎖腳本。
若要確認 Unblock-File 未變更執行原則,Get-ExecutionPolicy 顯示有效的執行原則,RemoteSigned。
腳本 Start-ActivityTracker.ps1 會從目前目錄執行。 腳本會開始執行,因為它已由 Unblock-File Cmdlet 解除封鎖。
參數
-Confirm
在執行 Cmdlet 之前,提示您進行確認。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | False |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | cf |
參數集
(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。 載入所有組態檔並執行所有腳本。 如果您執行從因特網下載的未簽署腳本,系統會在執行之前提示您輸入許可權。
參數屬性
| 類型: | 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 工作階段。 執行策略保存在 environment variable$Env:PSExecutionPolicyPreference中,而不是註冊表中。 關閉 PowerShell 工作階段時,會刪除變數和值。 -
CurrentUser- 第二高優先權。 該設定儲存在ExecutionPolicy登錄檔值中:HKCU:\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell -
LocalMachine- 最低優先權。 該設定儲存在ExecutionPolicy登錄檔值中:HKLM:\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell