Set-ExecutionPolicy

設定 Windows 電腦的 PowerShell 執行策略。

語法

All

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

Description

Set-ExecutionPolicy 指令檔會更改 Windows 電腦的 PowerShell 執行策略。 如需詳細資訊,請參閱 about_Execution_Policies。

從 PowerShell 6.0 開始,非 Windows 電腦的預設執行策略為 Unrestricted,且無法更改。 Set-ExecutionPolicy Cmdlet 可供使用,但 PowerShell 會顯示不支援的控制台訊息。

執行策略是 PowerShell 安全策略的一部分。 執行策略決定你是否能載入設定檔,例如你的 PowerShell 設定檔,或執行腳本。 還有,劇本是否必須數位簽名。

Set-ExecutionPolicy指令長的預設範圍是 LocalMachine,影響所有使用電腦的人。 要更改執行 LocalMachine策略,請以 管理員身份執行 PowerShell。

要顯示每個作用域的執行策略,請使用 Get-ExecutionPolicy -List。 要查看 PowerShell 會話的 Get-ExecutionPolicy 有效執行策略,且無需參數即可。

Note

執行策略也可以由群組原則設定。 若設定了群組原則,則會覆蓋本地的執行策略。 Windows PowerShell 5.1 和 PowerShell 6.0 及以上版本會將執行政策設定存放在不同位置,並且分別管理。 Windows PowerShell 的powershell.exe設定()不會影響 PowerShell(pwsh.exe)。

範例

範例 1:設定執行策略

這個範例展示了如何設定本地電腦的執行政策。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
Get-ExecutionPolicy -List
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser    RemoteSigned
 LocalMachine    RemoteSigned

Set-ExecutionPolicy指令長 ExecutionTPolicy 參數來指定該政策。RemoteSigned Scope 參數指定預設範圍值 LocalMachine。 要查看執行政策設定,請使用 帶有 Get-ExecutionPolicy 參數的 cmdlet。

範例 2:設定與群組政策衝突的執行政策

此指令嘗試將作用域的執行策略設定 LocalMachine 為 Restricted。 LocalMachine 雖然限制較多,但因為與群組政策衝突,因此並非有效的政策。

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

範例 3:將遠端電腦的執行策略套用到本地電腦

此指令從遠端電腦取得執行策略物件,並在本地電腦上設定該策略。 Get-ExecutionPolicy 會發送 Microsoft。PowerShell.ExecutionPolicy 物件在管線下方。 Set-ExecutionPolicy 接受管線輸入,且不需要 ExecutionPolicy 參數。

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

Invoke-Command指令本在本地電腦執行,並將 ScriptBlock 傳送至遠端電腦。 ComputerName 參數指定遠端電腦 Server01。 ScriptBlock 參數會在遠端電腦上執行 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。

使用者的有效執行策略變為 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 參數來指定該政策。Undefined Scope 參數指定了 CurrentUser。 要查看執行政策設定,請使用 帶有 Get-ExecutionPolicy 參數的 cmdlet。

範例 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 參數來指定該政策。AllSigned Scope 參數指定值 Process。 要查看執行政策設定,請使用 帶有 Get-ExecutionPolicy 參數的 cmdlet。

範例 7:解除封鎖腳本以執行該腳本而不更改執行策略

這個例子說明執行策略如何 RemoteSigned 防止你執行未簽名的腳本。

最佳做法是先閱讀腳本程式碼並確認安全,再使用Unblock-File指令長。 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。

指令檔顯示 Get-ExecutionPolicy 是 RemoteSigned 目前 PowerShell 會話的有效執行策略。

Start-ActivityTracker.ps1腳本是從目前目錄執行的。 劇本被阻擋 RemoteSigned 是因為劇本沒有數位簽名。

在這個例子中,腳本的程式碼被審查並驗證為安全可執行。 Unblock-File指令本 Path 參數會用來解除腳本的阻塞。

為了驗證該Unblock-File行為沒有改變執行策略,Get-ExecutionPolicy請顯示有效執行策略。 RemoteSigned

腳本 , Start-ActivityTracker.ps1 是從目前目錄執行的。 腳本開始執行是因為 cmdlet 解阻 Unblock-File 了它。

參數

-Confirm

在執行 Cmdlet 之前,提示您進行確認。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False
別名:參見

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-ExecutionPolicy

指定執行策略。 若沒有群組策略,且每個範圍的執行政策設定為 Undefined,則 Restricted 成為所有使用者的有效策略。

可接受的執行策略值如下:

  • AllSigned。 要求所有腳本與設定檔必須由受信任的發佈者簽署,包括在本地電腦撰寫的腳本。
  • Bypass。 未封鎖任何專案,而且沒有任何警告或提示。
  • Default。 設定預設執行原則。 Windows 用戶端用 Restricted,Windows 伺服器用 RemoteSigned。
  • RemoteSigned。 要求所有從網際網路下載的腳本和設定檔都必須由受信任的發佈者簽署。 Windows 伺服器電腦的預設執行原則。
  • Restricted。 無法載入設定檔或執行腳本。 Windows 用戶端電腦的預設執行原則。
  • Undefined。 範圍區沒有設定執行政策。 移除未由群組政策設定的範圍內的指定執行政策。 若所有作用域的執行策略均為 Undefined,則有效執行策略為 Restricted。
  • Unrestricted。 從 PowerShell 6.0 開始,這成為非 Windows 電腦的預設執行策略,且無法更改。 載入所有設定檔並執行所有腳本。 如果你執行一個從網路下載的未簽名腳本,執行前會要求你取得許可。

參數屬性

類型:ExecutionPolicy
預設值:None
接受的值:AllSigned, Bypass, Default, RemoteSigned, Restricted, Undefined, Unrestricted
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:0
必要:True
來自管線的值:True
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Force

會抑制所有確認提示。 使用此參數時需謹慎,以避免意外結果。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Scope

指定受執行政策影響的範圍。 預設範圍為 LocalMachine。 參數接受以下數值:

  • MachinePolicy - 由群組政策為所有電腦使用者設定
  • UserPolicy - 由群組原則為目前電腦使用者設定
  • Process - 僅影響目前的 PowerShell 會話
  • CurrentUser - 僅影響目前使用者
  • LocalMachine - 影響所有電腦使用者的預設範圍

Note

MachinePolicy 並 UserPolicy 由群組政策設定。 如果你嘗試將作用域設為這些值之一,PowerShell 會顯示錯誤訊息,表示範圍是由群組原則設定且無法更改。

若執行政策未由群組政策定義,有效執行策略依優先順序決定如下:

  • Process - 最高優先權
  • CurrentUser - 第二高優先權
  • LocalMachine - 最低優先權

請參閱 NOTES 章節,了解 PowerShell 如何儲存執行策略的更多資訊。

參數屬性

類型:ExecutionPolicyScope
預設值:LocalMachine
接受的值:CurrentUser, LocalMachine, MachinePolicy, Process, UserPolicy
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:1
必要:False
來自管線的值:False
來自管線按屬性名稱的值:True
來自剩餘引數的值:False

-WhatIf

顯示 Cmdlet 執行時會發生什麼事。 該 Cmdlet 未被執行。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False
別名:威斯康辛

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

CommonParameters

此 cmdlet 支援常見參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters。

輸入

ExecutionPolicy

你可以將執行策略物件管道連接到這個 cmdlet。

String

你可以將包含執行策略名稱的字串輸入這個 cmdlet。

輸出

None

此 Cmdlet 不會傳回任何輸出。

備註

Set-ExecutionPolicy 無法更改 MachinePolicy AND UserPolicy 範圍,因為它們是由群組政策設定的。 Set-ExecutionPolicy 即使使用者偏好比政策更嚴格,也不會覆寫群組政策。

若執行政策未由群組政策定義,有效執行策略依優先順序決定如下:

  • Process - 最高優先權。 Process 範圍只會影響目前的 PowerShell 工作階段。 執行原則會儲存在環境變數 $Env:PSExecutionPolicyPreference中,而不是登錄中。 關閉 PowerShell 工作階段時,會刪除變數和值。
  • CurrentUser - 第二高優先權。 設定儲存在使用者專屬 powershell.config.json 檔案中。
  • LocalMachine - 最低優先權。 設定會儲存在檔案中 $PSHOME/powershell.config.json 。

欲了解更多檔案資訊 powershell.config.json ,請參見 about_PowerShell_Config。