簡體   English   中英

您如何成功更改執行策略並啟用 PowerShell 腳本的執行

[英]How do you successfully change execution policy and enable execution of PowerShell scripts

我在更改 Windows Server 2008+ 操作系統中的執行策略時遇到問題。 這是我第一次嘗試運行我需要資源完全訪問權限的腳本,我在提升模式下啟動Powershell后嘗試以下操作:

Set-ExecutionPolicy Unrestricted

但我明白了:

Set-ExecutionPolicy : Windows PowerShell updated your execution policy
successfully, but the setting is overridden by a policy defined at a more
specific scope.  Due to the override, your shell will retain its current
effective execution policy of RemoteSigned. Type "Get-ExecutionPolicy -List"
to view your execution policy settings. For more information please see
"Get-Help Set-ExecutionPolicy".
At line:1 char:1
+ Set-ExecutionPolicy Unrestricted
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException
    + FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

雖然我是管理員,但我無法更改執行策略。 該怎么辦?

錯誤消息表明您嘗試通過Set-ExecutionPolicy定義的設置被另一個范圍內的設置覆蓋。 使用Get-ExecutionPolicy -List查看哪個范圍具有哪個設置。

PS C:\> Get-ExecutionPolicy -List

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

PS C:\> Set-ExecutionPolicy Restricted -Scope Process -Force
PS C:\> Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force
Set-ExecutionPolicy : 
PS C:\> Get-ExecutionPolicy -List

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

PS C:\> .\test.ps1
.\test.ps1 : 
PS C:\> Set-ExecutionPolicy Unestricted -Scope Process -Force
PS C:\> Set-ExecutionPolicy Restricted -Scope CurrentUser -Force
Set-ExecutionPolicy : 
PS C:\> Get-ExecutionPolicy -List

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

PS C:\> .\test.ps1

如您所見,盡管存在錯誤,但仍定義了兩個設置,但更具體的范圍 ( Process ) 中的設置仍然優先,阻止或允許腳本執行。

由於默認范圍是LocalMachine ,因此錯誤可能是由CurrentUserProcess范圍中的設置引起的。 但是,更常見的原因是腳本執行是通過組策略(本地或域)配置的。

本地管理員可以通過gpedit.msc (本地組策略編輯器)修改本地組策略,如本答案中所述。

域組策略不能被本地設置/策略取代,必須由域管理員通過域控制器上的gpmc.msc (組策略管理)進行更改。

對於本地和域策略,可以將設置定義為計算機設置:

Computer Configuration
`-Administrative Templates
  `-Windows Components
    `-Windows PowerShell -> Turn on Script Execution

或作為用戶設置:

User Configuration
`-Administrative Templates
  `-Windows Components
    `-Windows PowerShell -> Turn on Script Execution

前者應用於計算機對象,而后者應用於用戶對象。 對於本地策略,用戶策略和計算機策略之間沒有顯着差異,因為用戶策略會自動應用於計算機上的所有用戶。

策略可以具有以下三種狀態之一(如果單獨計算可用於狀態Enabled的 3 個設置,則為 5 個狀態):

  • 未配置:策略不控制 PowerShell 腳本執行。
  • 已啟用:允許執行 PowerShell 腳本。
    • 僅允許簽名腳本:僅允許執行簽名腳本(與Set-ExecutionPolicy AllSigned相同)。
    • 允許本地腳本和遠程簽名腳本:允許執行所有本地腳本(簽名或未簽名)和遠程位置的簽名腳本(與Set-ExecutionPolicy RemoteSigned相同)。
    • 允許所有腳本:允許執行本地和遠程腳本,無論它們是否已簽名(與Set-ExecutionPolicy Unrestricted相同)。
  • Disabled :禁止執行 PowerShell 腳本(與Set-ExecutionPolicy Restricted相同)。

通過Set-ExecutionPolicy所做的更改僅在本地和域策略設置為未配置時生效(執行策略在MachinePolicyUserPolicy范圍內Undefined )。

問題是 Windows 不允許在Unrestricted模式下執行所有腳本。 實際上,無論您的用戶(即使是管理員)的執行策略如何, Local Group Policy都將優先。

並且默認情況下,本地組腳本執行策略是不允許執行腳本的。 我們需要改變它!

更改本地組執行策略

我們通過Local Group Policy Editor執行此操作,您可以通過在 Windows 搜索欄中搜索“組策略”來訪問該編輯器。 或者這樣做:

  1. 通過點擊Win + r並鍵入命令mmc打開管理控制台。
  2. 轉到File -> Add Remove Snap In...
  3. 在左窗格中找到Group Policy Object Editor並添加它。
  4. 關閉表格。

然后在左側窗格中可以展開組編輯器。 展開它並導航到Computer Configuration -> Administrative Templates -> Windows Components

在此處輸入圖像描述

然后到Windows PowerShell

在此處輸入圖像描述

所以選擇Turn on Script Execution 將配置更改為Enabled並在Execution Policy中指定Allow all scripts

在此處輸入圖像描述

點擊Ok並關閉管理控制台進行確認。

現在可以安裝一個修補程序:

VS 2013 的 2.8.7: https ://github.com/NuGet/Home/releases/download/2.8.7/NuGet.Tools.vsix

VS 2015 的 3.1.1: https ://github.com/NuGet/Home/releases/download/3.1.1/NuGet.Tools.vsix

https://github.com/NuGet/Home/issues/974

如果您最近在使用 Visual Studio 2015 時遇到此問題,請檢查工具 > 擴展和更新中的 nuget 包管理器是否有任何更新>

如果 PowerShell ExecutionPolicy 由域控制器通過組策略設置,則必須在每次啟動后在注冊表中將 ExecutionPolicy 重置為“繞過”。 我創建了一對啟動腳本來自動化這個過程。 下面,我描述一下我的過程。

創建一個名為 %USERPROFILE%\Documents\StartupScripts 的文件夾,然后使用以下代碼在其中放置一個名為 ExecutionPolicy.ps1 的 PowerShell 腳本:

Push-Location
Set-Location HKLM:\Software\Policies\Microsoft\Windows\PowerShell
Set-ItemProperty . ExecutionPolicy "Bypass"
Pop-Location

然后創建一個名為 %USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\Startup.cmd 的文件,並將以下代碼放入其中:

PowerShell -Version 3.0 -Command "Set-ExecutionPolicy Unrestricted" >> "%TEMP%\StartupLog.txt" 2>&1
PowerShell -Version 3.0 "%USERPROFILE%\Documents\StartupScripts\ExecutionPolicy.ps1" >> "%TEMP%\StartupLog.txt" 2>&1

該腳本將在每次登錄開始時運行。

將以下內容添加到名為psa.cmd的文件中,並放入包含 PATH 的文件夾中:

POWERSHELL -Command "$enccmd=[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes((Get-Content '%1' | Out-String)));POWERSHELL -EncodedCommand $enccmd"

現在您可以運行任何 powershell 腳本,如下所示:

psa script.ps1

即使@Ansgar Wiechers 的答案不起作用..那么您的 MachinePolicy 范圍可能會出現問題。 因此,該問題可能有一種解決方法是.. 在以下位置編輯 ExecutionPolicy 鍵的注冊表值

HKEY_LOCAL_MACHINE -> 軟件 -> 策略 -> Microsoft -> Windows -> Powershell

在嘗試了這么多解決方案后,它對我執行 ps 腳本很有用。

盡管更改了限制,但如果您一次又一次遇到問題,請嘗試此操作。:右鍵單擊 windows 徽標> select Powershell(admin) ,然后您可以執行命令。

上次我跳進這個問題時,下面的代碼修復了它。 不要忘記以管理員權限運行終端並在執行腳本之前重新運行它。

Set-ItemProperty -path "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell" EnableScripts 1

我已經做了:

Set-ExecutionPolicy Unrestricted -Scope Process -Force
Set-ExecutionPolicy Unrestricted

它奏效了

以下是我修復我的方法:首先,我運行Get-ExecutionPolicy -List列出范圍及其當前的 state。

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

如您所見,所有范圍都未定義,我認為這就是為什么我無法在 PowerShell 上運行任何腳本的原因。 現在我要做的就是使 CurrentUser scope 不受限制,為此,我運行Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force

但也可以嘗試將CurrentUser scope 設置為 Restricted,然后再設置為 Unrestricted,以防遇到任何問題。

ExecutionPolicy Restricted -Scope CurrentUser -Force
ExecutionPolicy Unrestricted -Scope CurrentUser -Force

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM