共用方式為


Set-ExecutionPolicy

設定 Windows 電腦的 PowerShell 執行原則。

Syntax

Set-ExecutionPolicy
   [-ExecutionPolicy] <ExecutionPolicy>
   [[-Scope] <ExecutionPolicyScope>]
   [-Force]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

Description

Cmdlet 會 Set-ExecutionPolicy 變更 Windows 計算機的 PowerShell 執行原則。 如需詳細資訊,請參閱 about_Execution_Policies

從非 Windows 電腦的 PowerShell 6.0 開始,預設執行原則為 [不受限制 ],且無法變更。 Cmdlet Set-ExecutionPolicy 可供使用,但 PowerShell 會顯示不支援的控制台訊息。

執行原則是 PowerShell 安全性策略的一部分。 執行原則會決定您是否可以載入組態檔,例如 PowerShell 配置檔或執行腳本。 此外,腳本是否必須在執行之前進行數字簽署。

Cmdlet Set-ExecutionPolicy 的預設範圍是 LocalMachine,會影響使用電腦的每個人。 若要變更 LocalMachine 的執行原則,請使用以 系統管理員身分執行 PowerShell 來啟動 PowerShell。

若要依優先順序顯示每個範圍的執行原則,請使用 Get-ExecutionPolicy -List。 若要查看 PowerShell 會話的有效執行原則,而不搭配任何參數使用 Get-ExecutionPolicy

範例

範例 1:設定執行原則

此範例示範如何設定本機計算機的執行原則。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Get-ExecutionPolicy -List

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser    RemoteSigned
 LocalMachine    RemoteSigned

Cmdlet Set-ExecutionPolicy 會使用 ExecutionPolicy 參數來指定 RemoteSigned 原則。 Scope 參數會指定預設範圍值 LocalMachine。 若要檢視執行原則設定,請使用 Get-ExecutionPolicy Cmdlet 搭配 List 參數。

範例 2:設定與 群組原則 衝突的執行原則

此命令會嘗試將 LocalMachine 範圍的執行原則設定為 RestrictedLocalMachine 較嚴格,但不是有效的原則,因為它與 群組原則 衝突。 限制原則會寫入登錄區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

Cmdlet Set-ExecutionPolicy 會使用 ExecutionPolicy 參數來指定 受限制 的原則。 Scope 參數會指定預設範圍值 LocalMachine。 Cmdlet Get-ChildItem 會搭配 HKLM 提供者使用 Path 參數來指定登錄位置。

範例 3:將執行原則從遠端電腦套用至本機計算機

此命令會從遠端電腦取得執行原則物件,並在本機計算機上設定原則。 Get-ExecutionPolicy 會在管線下傳送 Microsoft.PowerShell.ExecutionPolicy 物件。 Set-ExecutionPolicy 接受管線輸入,而且不需要 ExecutionPolicy 參數。

PS> Invoke-Command -ComputerName Server01 -ScriptBlock { Get-ExecutionPolicy } | Set-ExecutionPolicy

Cmdlet Invoke-Command 會在本機計算機上執行,並將 ScriptBlock 傳送至遠端電腦。 ComputerName 參數會指定遠端電腦 Server01ScriptBlock 參數會在遠端電腦上執行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:移除目前使用者的執行原則

此範例示範如何使用 未定義的 執行原則來移除指定範圍的執行原則。

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Get-ExecutionPolicy -List

Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    RemoteSigned

Set-ExecutionPolicy 會使用 ExecutionPolicy 參數來指定 未定義 的原則。 Scope 參數會指定 CurrentUser。 若要檢視執行原則設定,請使用 Get-ExecutionPolicy Cmdlet 搭配 List 參數。

範例 6:設定目前 PowerShell 工作階段的執行原則

進程範圍只會影響目前的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 執行原則如何防止您執行未簽署的腳本。

最佳做法是讀取腳本的程序代碼,並在使用 Unblock-File Cmdlet 之前先確認它是安全的。 Cmdlet 會 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 所設定。

Cmdlet Get-ExecutionPolicy 顯示 RemoteSigned 是目前 PowerShell 會話的有效執行原則。

Start-ActivityTracker.ps1 文稿是從當前目錄執行。 腳本遭到 RemoteSigned 封鎖,因為腳本未經過數字簽署。

在此範例中,腳本的程式代碼已檢閱並驗證為安全執行。 Cmdlet Unblock-File 會使用 Path 參數來解除封鎖腳本。

若要確認 Unblock-File 未變更執行原則, Get-ExecutionPolicy 請顯示有效的執行原則 RemoteSigned

文稿 Start-ActivityTracker.ps1 是從當前目錄執行。 腳本會開始執行,因為它已由 Unblock-File Cmdlet 解除封鎖。

參數

-Confirm

在執行 Cmdlet 前提示您確認。

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ExecutionPolicy

指定執行原則。 如果沒有組策略,而且每個範圍的執行原則都設定為 [未定義], 則 [限制 ] 會成為所有使用者的有效原則。

可接受的執行原則值如下所示:

  • AllSigned。 要求所有腳本和組態檔都是由受信任的發行者簽署,包括本機計算機上撰寫的腳本。
  • Bypass。 不會封鎖任何項目,且不會顯示警告或提示。
  • Default。 設定預設執行原則。 適用於 Windows 用戶端或 Windows 伺服器的 RemoteSigned 限制。
  • RemoteSigned。 要求從因特網下載的所有腳本和配置檔都由受信任的發行者簽署。 Windows 伺服器電腦的預設執行原則。
  • Restricted。 不會載入組態檔或執行腳本。 Windows 用戶端電腦的預設執行原則。
  • Undefined。 未針對範圍設定執行原則。 從未由 群組原則 設定的範圍中移除指派的執行原則。 如果所有範圍中的執行原則為 [未定義],則有效的執行原則為 [限制]。
  • Unrestricted。 從 PowerShell 6.0 開始,這是非 Windows 計算機的預設執行原則,無法變更。 載入所有設定檔並執行所有指令碼。 如果您執行從因特網下載的未簽署腳本,系統會在執行之前提示您輸入許可權。
Type:ExecutionPolicy
Accepted values:AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Force

隱藏所有確認提示。 請小心搭配此參數使用,以避免發生非預期的結果。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Scope

指定受執行原則影響的範圍。 默認範圍為 LocalMachine

有效的執行原則取決於優先順序,如下所示:

  • MachinePolicy。 為電腦的所有用戶設定 群組原則。
  • UserPolicy。 由電腦目前使用者的 群組原則 設定。
  • 進程。 只會影響目前的PowerShell會話。
  • CurrentUser。 只會影響目前的使用者。
  • LocalMachine。 影響計算機所有用戶的預設範圍。

進程範圍只會影響目前的PowerShell會話。 執行原則會儲存在環境變數 $env:PSExecutionPolicyPreference中,而不是登錄。 關閉 PowerShell 工作階段時,會刪除變數和值。

CurrentUser 範圍的執行原則會寫入登錄區HKEY_LOCAL_USER

LocalMachine 範圍的執行原則會寫入登錄區HKEY_LOCAL_MACHINE

Type:ExecutionPolicyScope
Accepted values:CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy
Position:1
Default value:LocalMachine
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-WhatIf

顯示執行 Cmdlet 後會發生的情況。 Cmdlet 並不會執行。

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

輸入

Microsoft.PowerShell.ExecutionPolicy, System.String

您可以使用管線將執行原則物件或包含執行原則名稱的字串傳送至 Set-ExecutionPolicy

輸出

None

Set-ExecutionPolicy 不會傳回任何輸出。

備註

Set-ExecutionPolicy 不會變更 MachinePolicyUserPolicy 範圍,因為它們是由組策略所設定。

Set-ExecutionPolicy不會覆寫 群組原則,即使用戶喜好設定比原則更嚴格也一樣。

如果 群組原則 為計算機或使用者啟用 [開啟腳本執行],則會儲存使用者喜好設定,但無效。 PowerShell 會顯示說明衝突的訊息。