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 開始,預設執行原則是 Unrestricted 且無法變更。 Cmdlet Set-ExecutionPolicy 可供使用,但 PowerShell 會顯示不支援的控制台訊息。

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

Cmdlet Set-ExecutionPolicy 的預設範圍是 LocalMachine,這會影響使用計算機的每個人。 若要變更 的執行原則LocalMachine,請使用執行身分 管理員 istrator 啟動 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 參數來指定原則 RemoteSignedScope 參數會指定預設範圍值 LocalMachine。 若要檢視執行原則設定,請使用 Get-ExecutionPolicy Cmdlet 搭配 List 參數。

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

這個指令會嘗試將 LocalMachine 範圍的執行原則設定為 RestrictedLocalMachine 比較嚴格,但不是有效的原則,因為它與組策略衝突。 原則 Restricted 會寫入登錄區 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 參數來指定原則 RestrictedScope 參數會指定預設範圍值 LocalMachine。 Cmdlet Get-ChildItem搭配HKLM:磁碟驅動器使用Path參數來指定登錄位置。

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

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

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

Cmdlet Invoke-Command 會在本機計算機上執行,並將 ScriptBlock 傳送至遠端電腦。 ComputerName 參數會指定遠端電腦 Server01ScriptBlock 參數會在遠端電腦上執行Get-ExecutionPolicy。 物件 Get-ExecutionPolicy 會從管線向下傳送至 Set-ExecutionPolicySet-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 參數來指定原則AllSignedScope 參數會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 參數來指定原則UndefinedScope 參數會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 參數來指定原則 AllSignedScope 參數會指定 值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 工作階段的有效執行原則。

RemoteSigned Start-ActivityTracker.ps1 script is executed from the current directory. The script is blocked by ',因為腳本未以數位方式簽署。

在此範例中,腳本的程式代碼已檢閱並驗證為安全執行。 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

指定執行原則。 如果沒有組策略,且每個範圍的執行原則都設定為 Undefined,則 Restricted 會成為所有使用者的有效原則。

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

  • AllSigned. 要求所有腳本和組態檔都由受信任的發行者簽署,包括本機計算機上撰寫的腳本。
  • Bypass. 未封鎖任何專案,而且沒有任何警告或提示。
  • Default. 設定預設執行原則。 Restricted 適用於 Windows 用戶端或 RemoteSigned Windows 伺服器。
  • RemoteSigned. 要求從因特網下載的所有腳本和組態檔都由受信任的發行者簽署。 Windows 伺服器電腦的預設執行原則。
  • Restricted. 不會載入組態檔或執行腳本。 Windows 用戶端電腦的預設執行原則。
  • Undefined. 未針對範圍設定任何執行原則。 從組策略未設定的範圍中移除指派的執行原則。 如果所有範圍內的執行原則為 Undefined,則有效的執行原則為 Restricted
  • 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 - 由電腦目前使用者的組策略設定
  • Process - 僅影響目前的PowerShell工作階段
  • LocalMachine - 影響計算機所有用戶的預設範圍
  • CurrentUser - 僅影響目前使用者

範圍 Process 只會影響目前的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

輸入

ExecutionPolicy

您可以使用管線將執行原則物件傳送至此 Cmdlet。

String

您可以使用管線將包含執行原則名稱的字串傳送至此 Cmdlet。

輸出

None

此 Cmdlet 不會傳回任何輸出。

備註

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

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

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