本文譯自微軟PowerShell官方文檔,原版請參閱 PowerShell Documentation ## 介紹 設置Windows計算機的PowerShell執(zhí)行策略
Set-ExecutionPolicy [-ExecutionPolicy] <ExecutionPolicy> [[-Scope] <ExecutionPolicyScope>] [-Force] [-WhatIf] [-Confirm] [<CommonParameters>]
描述
Set-ExecutionPolicy 命令會更改Windows計算機的PowerShell執(zhí)行策略。有關更多信息,請參見 關于可執(zhí)行程序策略
對于非windows系統(tǒng)的PowerShell,自6.0版本以后,默認的執(zhí)行策略是 Unrestricted(不受限制的)
執(zhí)行策略是PowerShell安全策略的一部分。執(zhí)行策略決定您是否可以加載配置文件(例如PowerShell配置文件)或運行腳本。并且,腳本在運行之前是否必須經(jīng)過數(shù)字簽名。
Set-ExecutionPolicy 命令的默認范圍是本地機器(LocalMachine),它會影響使用計算機的每個人。若要更改LocalMachine的執(zhí)行策略,請使用“以管理員身份運行”啟動PowerShell 。
要按優(yōu)先順序顯示每個作用域的執(zhí)行策略,請使用 Get-ExecutionPolicy -List 如要查看您的PowerShell會話的有效執(zhí)行策略,請使用 Get-ExecutionPolicy 無參數(shù)的方法。
例子
示例1:設置執(zhí)行策略
本示例演示如何設置本地計算機的執(zhí)行策略。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Get-ExecutionPolicy -ListScope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser RemoteSigned
LocalMachine RemoteSigned
Set-ExecutionPolicy命令使用ExecutionPolicy參數(shù)指定 RemoteSigned(已遠程簽名) 的策略。該范圍參數(shù)指定默認的范圍值, LOCALMACHINE。若要查看執(zhí)行策略設置,請將該Get-ExecutionPolicycmdlet與List參數(shù)一起使用。
示例2:設置與組策略沖突的執(zhí)行策略
該命令嘗試將LocalMachine范圍的執(zhí)行策略設置為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
Set-ExecutionPolicy命令使用ExecutionPolicy參數(shù)指定受 限制的策略。該范圍參數(shù)指定默認的范圍值,LOCALMACHINE。該Get-ChildItemcmdlet與HKLM提供程序一起使用Path參數(shù)來指定注冊表位置。 ### 示例3:將執(zhí)行策略從遠程計算機應用到本地計算機 此命令從遠程計算機獲取執(zhí)行策略對象,并在本地計算機上設置策略。在管道中Get-ExecutionPolicy發(fā)送Microsoft.PowerShell.ExecutionPolicy對象。Set-ExecutionPolicy接受管道輸入,不需要 ExecutionPolicy參數(shù)。
PS> Invoke-Command -ComputerName Server01 -ScriptBlock { Get-ExecutionPolicy } | Set-ExecutionPolicy
Invoke-Command命令在本地計算機上執(zhí)行,并將ScriptBlock發(fā)送到遠程計算機。該計算機名參數(shù)指定遠程計算機,Server01上。該 腳本塊參數(shù)運行Get-ExecutionPolicy在遠程計算機上。該 Get-ExecutionPolicy物體順著管道發(fā)送Set-ExecutionPolicy。 Set-ExecutionPolicy將執(zhí)行策略應用于本地計算機的默認范圍 LocalMachine。 ### 示例4:設置執(zhí)行策略的范圍 本示例說明如何為指定范圍CurrentUser設置執(zhí)行策略。該 CurrentUser范圍只影響誰設置此范圍內(nèi)的用戶。
Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope CurrentUserGet-ExecutionPolicy -ListScope ExecutionPolicy ----- ---------------MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser AllSigned LocalMachine RemoteSigned
Set-ExecutionPolicy使用ExecutionPolicy參數(shù)指定AllSigned策略。該范圍參數(shù)指定CurrentUser。若要查看執(zhí)行策略設置,請將該Get-ExecutionPolicycmdlet與List參數(shù)一起使用。 用戶的有效執(zhí)行策略變?yōu)?code>AllSigned。 ### 示例5:刪除當前用戶的執(zhí)行策略 本示例說明如何使用未定義的執(zhí)行策略刪除指定范圍的執(zhí)行策略。
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUserGet-ExecutionPolicy -ListScope ExecutionPolicy ----- ---------------MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser Undefined LocalMachine RemoteSigned
Set-ExecutionPolicy使用ExecutionPolicy參數(shù)指定未定義策略。該范圍參數(shù)指定CurrentUser。若要查看執(zhí)行策略設置,請將該Get-ExecutionPolicycmdlet與List參數(shù)一起使用。 ### 示例6:設置當前PowerShell會話的執(zhí)行策略 Process(進程) 范圍只影響當前的PowerShell會話。執(zhí)行策略保存在環(huán)境變量中,$env:PSExecutionPolicyPreference并在關閉會話時被刪除。
Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope ProcessScope ExecutionPolicy ----- ---------------MachinePolicy Undefined UserPolicy Undefined Process AllSigned CurrentUser RemoteSigned LocalMachine RemoteSigned
在Set-ExecutionPolicy使用ExecutionPolicy參數(shù)指定的AllSigned 政策。所述范圍參數(shù)指定值過程。若要查看執(zhí)行策略設置,請將該Get-ExecutionPolicycmdlet與List參數(shù)一起使用。 ### 示例7:取消阻止腳本以運行它而不更改執(zhí)行策略 本示例說明RemoteSigned執(zhí)行策略如何阻止您運行未簽名的腳本。
最佳實踐是在使用Unblock-File命令之前閱讀腳本的代碼并驗證其安全性。該Unblock-Filecmdlet取消阻止腳本,以便它們可以運行,但不會更改執(zhí)行策略。
PS> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachinePS> Get-ExecutionPolicyRemoteSignedPS> .\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 : UnauthorizedAccessPS> Unblock-File -Path .\Start-ActivityTracker.ps1PS> Get-ExecutionPolicyRemoteSignedPS> .\Start-ActivityTracker.ps1Task 1:
在Set-ExecutionPolicy使用ExecutionPolicy參數(shù)指定下RemoteSigned 政策。該策略設置為默認范圍LocalMachine。
該Get-ExecutionPolicy命令顯示RemoteSigned是當前PowerShell會話的有效執(zhí)行策略。
在啟動ActivityTracker.ps1腳本是從當前目錄執(zhí)行。該腳本被RemoteSigned阻止,因為該腳本未進行數(shù)字簽名。
對于此示例,腳本的代碼已被檢查并確認可以安全運行。該Unblock-File命令使用Path參數(shù)來取消阻止腳本。
要驗證Unblock-File沒有更改執(zhí)行策略,請Get-ExecutionPolicy顯示有效的執(zhí)行策略RemoteSigned。
腳本Start-ActivityTracker.ps1是從當前目錄執(zhí)行的。該腳本開始運行,因為該Unblock-File命令未被cmdlet阻止。
參數(shù)
Confirm
運行命令之前提示您進行確認。
| 名稱 | 值 |
|---|---|
| Type(類型): | |
| Aliases(別名): | |
| Position(位置): | |
| Default value(默認值): | |
| Accept pipeline input(接受管道輸入): | |
| Accept wildcard characters(接受通配符): |
ExecutionPolicy
指定執(zhí)行策略。如果沒有組策略,并且每個范圍的執(zhí)行策略都設置為Undefined,那么Restricted將成為所有用戶的有效策略。
可接受的執(zhí)行策略值如下:
- 全部簽名。要求所有腳本和配置文件均由受信任的發(fā)布者簽名,包括在本地計算機上編寫的腳本。
- 繞過。沒有任何障礙,也沒有警告或提示。
- 默認。設置默認執(zhí)行策略。對于Windows客戶端或 RemoteSigned對于Windows服務器受限制。
- RemoteSigned。要求從Internet下載的所有腳本和配置文件均由受信任的發(fā)布者簽名。Windows服務器計算機的默認執(zhí)行策略。
- 受限制的。不加載配置文件或運行腳本。Windows客戶端計算機的默認執(zhí)行策略。
- 未定義。沒有為范圍設置執(zhí)行策略。從組策略未設置的范圍中刪除分配的執(zhí)行策略。如果所有作用域中的執(zhí)行策略均為未定義,則有效執(zhí)行策略為“受限”。
- 不受限制。從PowerShell 6.0開始,這是非Windows計算機的默認執(zhí)行策略,不能更改。加載所有配置文件并運行所有腳本。如果運行從Internet下載的未簽名腳本,則會在運行之前提示您獲得許可。
| 名稱 | 值 |
|---|---|
| Type(類型): | ExecutionPolicy |
| Accepted values(可接受的值): | AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted |
| Position(位置): | 0 |
| Default value(默認值): | None |
| Accept pipeline input(接受管道輸入): | True |
| Accept wildcard characters(接受通配符): | False |
Force
禁止所有確認提示。請謹慎使用此參數(shù),以避免意外結(jié)果。
| 名稱 | 值 |
|---|---|
| Type(類型): | |
| Position(位置): | |
| Default value(默認值): | |
| Accept pipeline input(接受管道輸入): | |
| Accept wildcard characters(接受通配符): |
Scope
指定受執(zhí)行策略影響的范圍。默認范圍是LocalMachine。
有效執(zhí)行策略由優(yōu)先級順序確定,如下所示: * MachinePolicy。由組策略為計算機的所有用戶設置。 * UserPolicy。由組策略為計算機的當前用戶設置。 * Process。僅影響當前的PowerShell會話。 * CurrentUser。僅影響當前用戶。 * LocalMachine。影響計算機所有用戶的默認范圍。
Process范圍只影響當前的PowerShell會話。執(zhí)行策略保存在環(huán)境變量中$env:PSExecutionPolicyPreference,而不是注冊表中。關閉PowerShell會話時,將刪除變量和值。
CurrentUser范圍的執(zhí)行策略被寫入注冊表配置單元 HKEY_LOCAL_USER。
LocalMachine范圍的執(zhí)行策略寫入注冊表配置單元 HKEY_LOCAL_MACHINE。
| 名稱 | 值 |
|---|---|
| Type(類型): | ExecutionPolicyScope |
| Accepted values(可接受的值): | CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy |
| Position(位置): | 1 |
| Default value(默認值): | LocalMachine |
| Accept pipeline input(接受管道輸入): | True |
| Accept wildcard characters(接受通配符): | False |
WhatIf
顯示命令運行時即將發(fā)生的情況。該cmdlet沒有運行。
| 名稱 | 值 |
|---|---|
| Type(類型): | |
| Aliases(別名): | |
| Position(位置): | |
| Default value(默認值): | |
| Accept pipeline input(接受管道輸入): | |
| Accept wildcard characters(接受通配符): |
輸入
Microsoft.PowerShell.ExecutionPolicy, System.String
您可以將執(zhí)行策略對象或包含執(zhí)行策略名稱的字符串傳遞給 Set-ExecutionPolicy。
輸出
無Set-ExecutionPolicy 不返回任何輸出。
注意事項
Set-ExecutionPolicy不會更改MachinePolicy和UserPolicy范圍,因為它們是由組策略設置的。
Set-ExecutionPolicy 即使用戶首選項比策略更具限制性,它也不會覆蓋組策略。
如果為計算機或用戶啟用了組策略打開腳本執(zhí)行,則將保存用戶首選項,但無效。PowerShell將顯示一條說明沖突的消息。