about_Execution_Policies
主題
about_Execution_Policies
簡短描述
說明 Windows PowerShell 執行原則,並說明如何加以管理。
完整描述
Windows PowerShell 執行原則可用來決定 Windows PowerShell 載入組態檔與執
行指令碼的條件。
您可以為本機電腦、目前的使用者或特定的工作階段設定執行原則。也可以使用群組原則
設定來設定電腦和使用者的執行原則。
本機電腦及目前使用者的執行原則會儲存在登錄中。您不需要在 Windows PowerShell
設定檔中設定執行原則。特定工作階段的執行原則只會儲存在記憶體中,且會在工作階段
關閉時遺失。
執行原則並不是限制使用者動作的安全性系統。
例如,使用者可以在無法執行指令碼時,在命令列輸入指令碼內容來輕鬆地規避原則。
相反地,執行原則可協助使用者設定基本規則,讓他們得以避免不小心違反這些規則。
WINDOWS POWERSHELL 執行原則
-------------------------------------
Windows PowerShell 執行原則如下:
"Restricted" 是預設原則。
Restricted
- 預設執行原則。
- 允許執行個別命令,但無法執行指令碼。
- 無法執行所有的指令碼檔案,包括格式化和組態檔 (.ps1xml)、模組指令碼檔
案 (.psm1) 和 Windows PowerShell 設定檔 (.ps1)。
AllSigned
- 指令碼可以執行。
- 所有的指令碼和組態檔都需經過受信任的發行者簽署,包括本機電腦上撰寫的
指令碼在內。
- 在執行來自尚未分類為受信任或不受信任之發行者的指令碼之前,對您進行提示。
- 執行來自網際網路以外來源的未簽署指令碼以及已簽署 (但居心不良) 的指令
碼會有風險。
RemoteSigned
- 指令碼可以執行。
- 從網際網路下載的指令碼和組態檔都必須有受信任發行者的數位簽章 (包括由
電子郵件程式和立即訊息程式所下載)。
- 已在本機電腦上執行及撰寫的指令碼 (並非從網際網路所下載) 不需要數位簽章。
- 執行已簽署但惡意的指令碼會有風險。
Unrestricted
- 可以執行未經簽署的指令碼 (執行惡意的指令碼會有風險)。
- 在執行從網際網路下載的指令碼和組態檔之前,對使用者提出警告。
Bypass
- 不會封鎖任何項目,而且沒有警告或提示。
- 在這個執行原則所針對的組態中,Windows PowerShell 指令碼是建立來提
供較大的應用程式使用,或是做為本身具有安全性模型之程式的基礎。
Undefined
- 目前的範圍中沒有設定執行原則。
- 如果所有範圍中的執行原則是 Undefined,則有效的執行原則為
Restricted,這是預設的執行原則。
注意:在無法區分通用命名慣例 (UNC) 路徑與網際網路路徑的系統上,可能不允許 UNC 路
徑所識別的指令碼搭配 RemoteSigned 執行原則執行。
執行原則範圍
----------------------
您可以設定只在特定範圍內有效的執行原則。
Scope 的有效值為 Process、CurrentUser 和 LocalMachine。LocalMachine 是
設定執行原則時的預設值。
Scope 值會以優先順序列出。
- Process
執行原則只會影響目前的工作階段 (目前的 Windows PowerShell 處理程序)。
執行原則會儲存在 $PSExecutionPolicyPreference 環境變數中。其中設定
了原則的工作階段關閉時,此值就會刪除。
- CurrentUser
執行原則只會影響目前的使用者, 且儲存在 HKEY_CURRENT_USER 登錄子機
碼中。
- LocalMachine
執行原則會影響目前電腦的所有使用者, 且儲存在 HKEY_LOCAL_MACHINE 登
錄子機碼中。
有較優先順序的原則會影響目前的工作階段,即使之前已用較低等級的優先順序設定了限制
較嚴格的原則。
如需詳細資訊,請參閱 Set-ExecutionPolicy。
取得執行原則
------------------------------
若要取得目前工作階段中有效的 Windows PowerShell 執行原則,請使用
Get-ExecutionPolicy Cmdlet。
下列命令會取得目前的執行原則:
get-executionpolicy
若要取得目前工作階段中有效的所有執行原則,並以優先順序加以顯示,請輸入:
get-executionpolicy -list
結果看起來會與下列範例輸出類似:
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser RemoteSigned
LocalMachine AllSigned
在此例中,有效的執行原則為 RemoteSigned,因為目前使用者的執行原則優先順序高於
為本機電腦所設定的執行原則。
若要取得特定範圍的執行原則,請使用 Get-ExecutionPolicy 的 Scope 參數。
例如,下列命令會取得目前使用者範圍的執行原則。
get-executionpolicy -scope CurrentUser
變更執行原則
------------------------------
若要變更電腦上的 Windows PowerShell 執行原則,請使用 Set-ExecutionPolicy
Cmdlet。
變更將立即生效;您不需要重新啟動 Windows PowerShell。
如果您針對本機電腦 (預設值) 或目前的使用者設定執行原則,則變更會儲存在登錄中,
且在再次變更之前均維持有效。
如果您設定目前處理程序的執行原則,則其不會儲存在登錄中, 且在目前的處理程序或任
何子處理程序關閉之前都會保留。
注意:若要在 Windows Vista 與較新的 Windows 版本中執行命令以變更本機電腦 (預
設值) 的執行原則,請以 [以系統管理員身分執行] 選項啟動 Windows PowerShell。
若要變更執行原則,請輸入:
Set-ExecutionPolicy <policy-name>
例如:
Set-ExecutionPolicy RemoteSigned
若要設定特定範圍的執行原則,請輸入:
Set-ExecutionPolicy <policy-name> -scope <scope>
例如:
Set-ExecutionPolicy RemoteSigned -scope CurrentUser
變更執行原則的命令可能執行成功,但仍不會變更有效的執行原則。
例如,為本機電腦設定執行原則的命令可能會執行成功,但會由目前使用者的執行原則所覆寫。
移除執行原則
----------------------------
若要移除特定範圍的執行原則,請將執行原則的值設為 Undefined。
例如,若要移除本機電腦所有使用者的執行原則,請輸入:
set-executionpolicy Undefined
或是輸入:
set-executionpolicy Undefined -scope LocalMachine
如果未在任何範圍中設定執行原則,則有效的執行原則為 Restricted,這是預設值。
在 POWERSHELL.EXE 中設定執行原則
-----------------------------------------
您可以使用 PowerShell.exe 的 ExecutionPolicy 參數來針對新的 Windows
PowerShell 工作階段設定執行原則。
該原則只會影響目前的工作階段和子工作階段。
若要設定新工作階段的執行原則,請在命令列啟動 Windows PowerShell
(例如 Cmd.exe 或 Windows PowerShell),然後使用 PowerShell.exe 的
ExecutionPolicy 參數來設定執行原則。
例如:
powershell.exe -executionpolicy -allsigned
您所設定的執行原則不會儲存在登錄中。
相反地,執行原則會儲存在 $PSExecutionPolicyPreference 環境變數中。當您關
閉其中設定了原則的工作階段時,此變數就會刪除。
在工作階段中,針對工作階段所設定的執行原則優先順序高於在本機電腦或目前使用者的登
錄中所設定的執行原則, 不過,其優先順序不會高於使用群組原則設定所設定的執行原則
(詳情如下)。
使用群組原則來管理執行原則
-------------------------------------------
您可以使用「開啟指令碼執行」群組原則設定來管理您企業內電腦的執行原則。群組原則
設定會覆寫 Windows PowerShell 在所有範圍中設定的執行原則。
「開啟指令碼執行」原則設定如下:
-- 如果您停用「開啟指令碼執行」,指令碼就不會執行。這個原則等於 "Restricted"
執行原則。
-- 如果您啟用「開啟指令碼執行」,就可以選取執行原則。群組原則設定等於下列的執
行原則設定。
群組原則 執行原則
------------ ----------------
允許所有指令碼。 Unrestricted
允許本機指令碼和遠端簽署的指令碼。 RemoteSigned
只允許簽署的指令碼。 AllSigned
-- 如果未設定「開啟指令碼執行」,就不會有效果。在 Windows PowerShell 中設
定的執行原則有效。
PowerShellExecutionPolicy.adm 檔案會在群組原則編輯器中,將「開啟指令碼執行」
原則新增至下列路徑的 [電腦設定] 和 [使用者設定] 節點。
Windows XP 和 Windows Server 2003:
Administrative Templates\Windows Components\Windows PowerShell
Windows Vista 和較新版的 Windows:
Administrative Templates\Classic Administrative Templates\
Windows Components\Windows PowerShell
在 [電腦設定] 節點中設定的原則優先順序高於在 [使用者設定] 中設定的原則。
PowerShellExecutionPolicy.adm 檔案可用於 Microsoft 下載中心。如需詳細資
訊,請參閱下列網址的《Windows PowerShell 的系統管理範本》:
https://go.microsoft.com/fwlink/?LinkId=131786 (英文)。
執行原則優先順序
---------------------------
在判斷工作階段的有效執行原則時,Windows PowerShell 會以下列的優先順序評估執
行原則:
- 群組原則:電腦設定
- 群組原則:使用者設定
- 執行原則:處理程序 (或 PowerShell.exe -ExecutionPolicy) 執行原則:
CurrentUser
- 執行原則:LocalMachine
管理已簽署和未簽署的指令碼
----------------------------------
如果 Windows PowerShell 執行原則設為 RemoteSigned,Windows PowerShell 就
不會執行從網際網路下載而未經簽署的指令碼 (包括由電子郵件程式和立即訊息程式
所下載)。
您可以簽署指令碼,或者選擇執行未簽署的指令碼,但不變更執行原則。
如需詳細資訊,請參閱 about_Signing。
請參閱
Get-ExecutionPolicy
Set-ExecutionPolicy
about_Signing
《Windows PowerShell 的系統管理範本》
(https://go.microsoft.com/fwlink/?LinkId=131786)