我在更改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
虽然我是管理员,但我无法更改执行政策 . 该怎么办?
6 回答
创建以下
ps.cmd
并将其放在PATH中:现在您可以运行任何PowerShell脚本,如下所示:
错误消息表示您尝试通过
Set-ExecutionPolicy
定义的设置被另一个范围中的设置覆盖 . 使用Get-ExecutionPolicy -List
查看哪个范围具有哪个设置 .如您所见,尽管存在错误,但两个设置都已定义,但更具体范围(
Process
)中的设置仍然优先,阻止或允许脚本执行 .由于默认范围是
LocalMachine
,因此错误可能是由CurrentUser
或Process
范围中的设置引起的 . 但是,更常见的原因是脚本执行是通过组策略(本地或域)配置的 .本地管理员可以通过
gpedit.msc
(本地组策略编辑器)修改本地组策略,如this answer中所述 .域组策略不能被本地设置/策略取代,必须由域管理员通过域控制器上的
gpmc.msc
(组策略管理)进行更改 .对于本地和域策略,可以将设置定义为计算机设置:
或作为用户设置:
前者适用于计算机对象,后者适用于用户对象 . 对于本地策略,用户和计算机策略之间没有显着差异,因为用户策略会自动应用于计算机上的所有用户 .
策略可以具有三种状态之一(如果计算可用于单独启用状态的3种设置,则为五种状态):
未配置:策略不控制PowerShell脚本执行 .
已启用:允许PowerShell脚本执行 .
仅允许签名脚本:仅允许执行签名脚本(与
Set-ExecutionPolicy AllSigned
相同) .允许本地脚本和远程签名脚本:允许从远程位置执行所有本地脚本(已签名或未签名)和签名脚本(与
Set-ExecutionPolicy RemoteSigned
相同) .允许所有脚本:允许执行本地和远程脚本,无论它们是否已签名(与
Set-ExecutionPolicy Unrestricted
相同) .禁用:禁止PowerShell脚本执行(与
Set-ExecutionPolicy Restricted
相同) .仅当本地和域策略设置为“未配置”(范围
MachinePolicy
和UserPolicy
中的执行策略Undefined
)时,通过Set-ExecutionPolicy
所做的更改才会生效 .问题是Windows不允许在
Unrestricted
模式下执行所有脚本 . 实际上,无论您的用户的执行策略(即使是管理员),Local Group Policy
都将优先考虑 .默认情况下,本地组脚本执行策略是不允许执行脚本的策略 . 我们需要改变它!
更改本地组执行策略
我们通过
Local Group Policy Editor
执行此操作,您可以通过在Windows搜索栏中搜索"group policy"来访问 . 或者这样做:点击
Win + r
并输入命令mmc
打开管理控制台 .转到
File -> Add Remove Snap In...
.在左侧窗格中找到
Group Policy Object Editor
并添加它 .关闭表格 .
然后在左窗格中可以展开组编辑器 . 展开它并导航到
Computer Configuration -> Administrative Templates -> Windows Components
.然后到
Windows PowerShell
.所以选择
Turn on Script Execution
. 将配置更改为Enabled
并在Execution Policy
中指定Allow all scripts
.点击
Ok
确认并关闭管理控制台 .现在可以安装修补程序:
2.8.7 for VS 2013:https://github.com/NuGet/Home/releases/download/2.8.7/NuGet.Tools.vsix
3.1.1 for VS 2015: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重置为注册表中的“Bypass” . 我已经创建了一对启动脚本来自动化该过程 . 下面,我描述我的过程 .
创建一个名为%USERPROFILE%\ Documents \ StartupScripts的文件夹,然后在其中放置一个名为ExecutionPolicy.ps1的PowerShell脚本,其中包含以下代码:
然后创建一个名为%USERPROFILE%\ AppData \ Roaming \ Microsoft \ Windows \ Start Menu \ Programs \ Startup \ Startup.cmd的文件,并将以下代码放入其中:
此脚本将在每次登录开始时运行 .