about_Execution_Policies
適用於: Windows PowerShell 2.0, Windows PowerShell 3.0
主題
about_Execution_Policies
簡短描述
描述 Windows PowerShell® 執行原則,並說明如何管理這些原則。
詳細描述
Windows PowerShell 執行原則可讓您判斷在哪些情況下 Windows PowerShell 會載入組態檔和執行指令碼。
您可以設定本機電腦、目前使用者或特定工作階段的執行原則。您也可以使用 [群組原則] 設定來設定電腦和使用者的執行原則。
本機電腦和目前使用者的執行原則會儲存在登錄中。您不需要在您的 Windows PowerShell 設定檔中設定執行原則。特定工作階段的執行原則只會儲存在記憶體中並工作階段關閉時遺失。
執行原則並不是會限制使用者動作的安全性系統。例如,使用者可以在無法執行指令碼時於命令列輸入指令碼內容,輕鬆規避原則。然而,執行原則可協助使用者設定基本規則,防止他們不小心違反規則。
WINDOWS POWERSHELL 執行原則
Windows PowerShell 執行原則如下所示:
"Restricted" 是預設原則。
RESTRICTED
- Windows 8、Windows Server 2012 和 Windows 8.1 中的預設執行原則。
- 允許個別命令,但不會執行指令碼。
- 防止執行所有指令碼檔案,包括格式化和組態檔 (.ps1xml)、模組指令碼檔案 (.psm1) 和 Windows PowerShell 設定檔 (.ps1)。
ALLSIGNED
- 指令碼可以執行。
- 要求由信任的發行者簽署所有的指令碼與組態檔,包括您在本機電腦上編寫的指令碼。
- 在從您尚未歸類為受信任或未受信任的發行者執行指令碼之前,提示您。
- 執行已簽署但惡意之指令碼的風險。
REMOTESIGNED
- 指令碼可以執行。這是 Windows Server 2012 R2 中的預設執行原則。
- 從網際網路 (包括電子郵件和即時訊息程式) 下載的指令碼和組態檔上需要有來自受信任發行者的數位簽章。
- 您在本機電腦上撰寫 (不是從網際網路下載) 的指令碼上不需有數位簽章。
- 如果已解除封鎖 (例如使用 Unblock-File Cmdlet) 從網際網路下載但未簽署的指令碼,則執行這些指令碼。
- 執行來自網際網路以外來源的未簽署指令碼以及已簽署但惡意之指令碼的風險。
UNRESTRICTED
- 未簽署的指令碼可以執行。(這有執行惡意指令碼的風險)。
- 在使用者執行從網際網路下載的指令碼和組態檔之前提出警告。
BYPASS
- 不會封鎖任何項目,且不會顯示警告或提示。
- 此執行原則針對下列設定而設計:Windows PowerShell 指令碼內建於較大型的應用程式,或 Windows PowerShell 是有專屬安全性模型之程式的基礎。
UNDEFINED
- 目前範圍中未設定執行原則。
- 如果所有範圍中的執行原則為 Undefined,則有效的執行原則為 Restricted,這是預設執行原則。
注意:在不區分通用命名慣例 (UNC) 路徑與網際網路路徑的系統上,UNC 路徑所識別的指令碼可能不得以 RemoteSigned 執行原則來執行。
執行原則範圍
您可以設定只在特定範圍中有效的執行原則。
範圍的有效值包括 Process、CurrentUser 和 LocalMachine。LocalMachine 是設定執行原則時的預設值。
這些範圍值會依照優先順序列出。
- PROCESS
執行原則只會影響目前的工作階段 (目前的 Windows PowerShell 處理程序)。
執行原則會儲存在 $env: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 -ExecutionPolicy <PolicyName>
例如:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
若要在特定範圍中設定執行原則,請輸入:
Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>
例如:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
用以變更執行原則的命令可能成功,但仍未變更有效的執行原則。
例如,為本機電腦設定執行原則的命令可能成功,但由目前使用者的執行原則所覆寫。
移除執行原則
若要移除特定範圍的執行原則,請將執行原則的值設定為 Undefined。
例如,若要移除本機電腦的所有使用者的執行原則,請輸入:
Set-ExecutionPolicy Undefined
或者輸入:
Set-ExecutionPolicy Undefined -scope LocalMachine
如果未在任何範圍中設定執行原則,則有效的執行原則為 Restricted (預設值)。
為一個工作階段設定不同的執行原則
您可使用 PowerShell.exe 的 ExecutionPolicy 參數來設定新的 Windows PowerShell 工作階段的執行原則。此原則只會影響目前工作階段和子工作階段。
若要設定新工作階段的執行原則,請在命令列 (例如 Cmd.exe 或 Windows PowerShell) 啟動 Windows PowerShell,然後使用 PowerShell.exe 的 ExecutionPolicy 參數來設定執行原則。
例如:
PowerShell.exe -ExecutionPolicy AllSigned
您設定的執行原則不會儲存在登錄中,而是儲存在 $env:PSExecutionPolicyPreference 環境變數中。當您關閉原則設定所在的工作階段時,此變數會遭到刪除。您無法藉由編輯變數值來變更原則。
在工作階段期間,為此工作階段設定的執行原則優先於在本機電腦或目前使用者的登錄中所設定的執行原則。不過,它並沒有優先於使用 [群組原則] 設定所設定的執行原則 (稍後討論)。
使用群組原則來管理執行原則
您可以使用 [開啟指令碼執行] 群組原則設定來管理您的企業中電腦的執行原則。群組原則設定會覆寫在 Windows PowerShell 中針對所有範圍設定的執行原則。
[開啟指令碼執行] 原則設定如下所示:
-- 如果您停用 [開啟指令碼執行],則不會執行指令碼。這就相當於 "Restricted" 執行原則。
-- 如果您啟用 [開啟指令碼執行],您即可選取執行原則。群組原則設定相當於下列的執行原則設定。
Group Policy Execution Policy
------------ ----------------
Allow all scripts. Unrestricted
Allow local scripts RemoteSigned
and remote signed
scripts.
Allow only signed AllSigned
scripts.
-- 如果未設定 [開啟指令碼執行],該設定就沒有作用。在 Windows PowerShell 中設定的執行原則會生效。
PowerShellExecutionPolicy.adm 和 PowerShellExecutionPolicy.admx 檔案會將 [開啟指令碼執行] 原則加入至 [群組原則編輯器] 中的 [電腦設定] 和 [使用者設定] 節點 (路徑如下所示)。
For Windows XP and Windows Server 2003:
Administrative Templates\Windows Components\Windows PowerShell
For Windows Vista and later versions of Windows:
Administrative Templates\Classic Administrative Templates\
Windows Components\Windows PowerShell
在 [電腦設定] 節點中設定的原則優先於在 [使用者設定] 節點中設定的原則。
PowerShellExecutionPolicy.adm 檔案可在 Microsoft 下載中心取得。如需詳細資訊,請參閱「Windows PowerShell 的系統管理範本」(https://go.microsoft.com/fwlink/?LinkId=131786)。
如需詳細資訊,請參閱 about_Group_Policy_Settings (https://go.microsoft.com/fwlink/?LinkID=251696)。
執行原則優先順序
在判斷工作階段的有效執行原則時,Windows PowerShell 會依照下列優先順序評估執行原則:
- Group Policy: Computer Configuration
- Group Policy: User Configuration
- Execution Policy: Process (or PowerShell.exe -ExecutionPolicy)
- Execution Policy: CurrentUser
- Execution Policy: LocalMachine
管理已簽署和未簽署的指令碼
如果您的 Windows PowerShell 執行原則是 RemoteSigned,Windows PowerShell 將不會執行從網際網路 (包括電子郵件和即時訊息程式) 下載的未簽署指令碼。
您可以簽署指令碼或選擇執行未簽署的指令碼,而不需變更執行原則。
從 Windows PowerShell 3.0 開始,您可以使用 Get-Item Cmdlet 的 Stream 參數來偵測因為從網際網路下載而遭到封鎖的檔案,而且您可以使用 Unblock-File Cmdlet 來解除封鎖指令碼,以便在 Windows PowerShell 中加以執行。
如需詳細資訊,請參閱 about_Signing、Get-Item 和 Unblock-File。
另請參閱
about_Environment_Variables
about_Signing
Get-ExecutionPolicy
Set-ExecutionPolicy
Get-Item
Unblock-File
「Windows PowerShell 的系統管理範本」
(https://go.microsoft.com/fwlink/?LinkId=131786)
「PowerShell.exe 主控台說明」