PowerShell 说“在这个系统上禁用了脚本的执行”。

问:

我正在尝试运行从 cmd.exe 调用 PowerShell 脚本的 cmd 文件,但我收到此错误:

无法加载 Management_Install.ps1,因为此系统上禁用了脚本执行。

我运行了这个命令:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

当我从 PowerShell 运行 Get-ExecutionPolicy 时,它返回 Unrestricted。

PS C:\Users\Administrator\> Get-ExecutionPolicy
Unrestricted

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts> powershell .\Management_Install.ps1 1 警告:运行 x86 PowerShell… 文件 C:\Projects\Microsoft.Practices.ESB\Source \Samples\Management Portal\Install\Scripts\Management_Install.ps1 无法加载,因为此系统上禁用了脚本的执行。有关更多详细信息,请参阅“get-help about_signing”。在 line:1 char:25 .\Management_Install.ps1 <<<< 1 CategoryInfo : NotSpecified: (😃 [], PSSecurityExceptionfullyQualifiedErrorId : RuntimeException C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install \Scripts> PAUSE 按任意键继续。 . .

系统为 Windows Server 2008R2。

我究竟做错了什么?

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

答1:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

如果您使用的是 Windows Server 2008 R2,则有一个 x64 和 x86 版本的 PowerShell,两者都必须设置其执行策略。您是否在两台主机上都设置了执行策略?

作为管理员,您可以通过在 PowerShell 窗口中键入以下内容来设置执行策略:

Set-ExecutionPolicy RemoteSigned

有关详细信息,请参阅 Using the Set-ExecutionPolicy Cmdlet。

完成后,您可以使用以下命令将策略设置回其默认值:

Set-ExecutionPolicy Restricted

您可能会看到一个错误:

Access to the registry key
'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied. 
To change the execution policy for the default (LocalMachine) scope, 
  start Windows PowerShell with the "Run as administrator" option. 
To change the execution policy for the current user, 
  run "Set-ExecutionPolicy -Scope CurrentUser".

因此,您可能需要像这样运行命令(如注释中所示):

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

如果您想将权限恢复原样,Set-ExecutionPolicy Restricted 似乎是撤消它的方法:technet.microsoft.com/en-us/library/ee176961.aspx。 @Jack Edmonds 的临时绕过方法对我来说看起来更安全:powershell -ExecutionPolicy ByPass -File script.ps1

要获得更安全的策略,请将其范围限定为实际用户:Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

Set-ExecutionPolicy RemoteSigned 不能是脚本的第一行。如果是,请在运行脚本的其余部分之前突出显示它并仅在最初选择运行。

我在 SF 网站上遇到了一个类似的问题,"Powershell execution policy within SQL Server” 于 2014 年 10 月 10 日问。那里的答案包括Get-ExecutionPolicy -List,它帮助我看到了不同的范围。 cmd Get-ExecutionPolicy 不显示所有范围。 Import-Module SQLPS 现在正在使用更改如下的政策:{Undefined- Process,MachinePolicy,UserPolicy,}; {RemoteSigned- CurrentUser, LocalMachine}。

如果我这样做,更改是否仅持续当前 PowerShell 的持续时间?还是比这更大?

答2:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

您可以在运行 PowerShell 时通过添加 -ExecutionPolicy Bypass 绕过此策略来处理单个文件

powershell -ExecutionPolicy Bypass -File script.ps1

如果您使用的是非管理员帐户,这也非常方便。我在任务栏上创建了指向 %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass 的快捷方式。

请注意,Microsoft Technet 将其风格化为“绕过”,而不是“绕过”。请参阅:technet.microsoft.com/nl-nl/library/hh849812.aspx

这对我不起作用,我得到的权限被拒绝,就像我正常调用它一样。通过执行 type script.ps1 | powershell - 从 .bat 调用 ps1 确实有效。

执行策略的目的是防止人们双击 .ps1 并意外运行他们不打算执行的操作。 .bat 个文件会发生这种情况

A parameter cannot be found that matches parameter name 'File' 命令:Set-ExecutionPolicy -ExecutionPolicy Bypass -File .\file.ps1

答3:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

我遇到了类似的问题,并注意到 Windows Server 2012 上的默认 cmd 正在运行 x64。

对于 Windows 11、Windows 10、Windows 7、Windows 8、Windows Server 2008 R2 或 Windows Server 2012,以管理员身份运行以下命令:

x86(32 位) 打开 C:\Windows\SysWOW64\cmd.exe 运行命令 powershell Set-ExecutionPolicy RemoteSigned

x64(64 位) 打开 C:\Windows\system32\cmd.exe 运行命令 powershell Set-ExecutionPolicy RemoteSigned

您可以使用检查模式

在 CMD 中:回显 %PROCESSOR_ARCHITECTURE%

在 Powershell 中:[环境]::Is64BitProcess

参考资料: MSDN - Windows PowerShell execution policies Windows - 32bit vs 64bit directory explanation

在 windows10 中为我工作

为我在 vscode 上的 nodemon 安装过程工作。干杯。

在 Windows 10 x64 上工作

非常感谢,在 Windows 10 VSCode 中为我工作!

谢谢,我使用 powershell 而不是 git bash 作为命令行,大声笑😊

答4:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

大多数现有答案都解释了如何,但很少有人解释为什么。在你在互联网上执行来自陌生人的代码之前,尤其是禁用安全措施的代码之前,你应该准确地了解你在做什么。所以这里有更多关于这个问题的细节。

来自 TechNet About Execution Policies Page:

Windows PowerShell 执行策略允许您确定 Windows PowerShell 加载配置文件和运行脚本的条件。

PowerShell Basics - Execution Policy and Code Signing 列举的好处是:

执行控制 - 控制执行脚本的信任级别。 Command Highjack - 防止在我的路径中注入命令。身份 - 脚本是由我信任的开发人员创建和签名的和/或使用我信任的证书颁发机构的证书签名的。完整性 - 恶意软件或恶意用户无法修改脚本。

要检查您当前的执行策略,您可以运行 Get-ExecutionPolicy。但你可能在这里是因为你想改变它。

为此,您将运行 Set-ExecutionPolicy cmdlet。

在更新执行策略时,您需要做出两个主要决定。

执行策略类型:

受限† - 不能在系统上执行本地、远程或下载的脚本。

AllSigned - 运行的所有脚本都需要进行数字签名。

RemoteSigned - 所有远程脚本 (UNC) 或下载的都需要签名。

不受限制 - 不需要任何类型的脚本的签名。

新变化的范围

LocalMachine† - 执行策略影响计算机的所有用户。

CurrentUser - 执行策略仅影响当前用户。

进程 - 执行策略仅影响当前的 Windows PowerShell 进程。

† = 默认

例如:如果您想仅为 CurrentUser 将策略更改为 RemoteSigned,您将运行以下命令:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

注意:要更改执行策略,您必须以管理员身份运行 PowerShell。如果您处于常规模式并尝试更改执行策略,您将收到以下错误:

拒绝访问注册表项“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell”。要更改默认 (LocalMachine) 范围的执行策略,请使用“以管理员身份运行”选项启动 Windows PowerShell。

如果您想加强对尚未从 Internet 下载的您自己的脚本(或至少不包含 UNC 元数据)的内部限制,您可以强制该策略仅运行签名的脚本。要签署您自己的脚本,您可以按照 Scott Hanselman 关于 Signing PowerShell Scripts 的文章中的说明进行操作。

注意:大多数人在打开 Powershell 时可能会收到此错误,因为 PS 在启动时尝试做的第一件事是执行您的用户配置文件脚本,该脚本设置您喜欢的环境。

该文件通常位于:

%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1

您可以通过运行 powershell 变量找到确切位置

$profile

如果配置文件中没有您关心的内容,并且不想对您的安全设置大惊小怪,您可以将其删除,powershell 将找不到任何它无法执行的内容。

我觉得重要的是要注意,虽然执行策略是一种安全措施,但它并不是为了阻止用户执行 PowerShell 代码。执行政策旨在保护您的脚本并确定谁编写、修改或批准了它们,仅此而已。使用像 Get-Content .\MyFile.ps1 | powershell.exe -NoProfile - 这样简单的东西来 get around execution policy 是微不足道的。

但是,鉴于 -ExecutionPolicy ByPass 的存在,该策略的目的是什么?是否只是为了防止用户意外打开powershell控制台并运行恶意脚本?如果攻击者想解决这个问题,他们不能只使用可执行文件或批处理脚本吗?即使在阅读@BaconBits 评论后,我也不太确定该政策旨在防止什么情况......

@Ajedi32 假设我有一个在网络共享上运行脚本的任务。当我调用我的脚本时,我希望我的进程验证脚本是否已签名。我希望我的代码仔细检查我要运行的脚本是我信任运行的代码。我不在乎你是否可以运行我的代码。停止这是访问权限的工作。我只是想阻止你让我运行不是我写的代码。访问权限意味着操作系统会阻止您在登录时修改我的代码。代码签名和执行策略意味着我的脚本在我运行它时没有被修改。

如何展示如何签署脚本而不是如何禁用安全性?这是一个选择吗?

@gman,我认为这是一个公平的观点。要众包工作,您当然可以添加该答案或附加到该答案。

答5:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

我们可以通过以下命令获取当前 ExecutionPolicy 的状态:

Get-ExecutionPolicy

默认情况下,它是受限的。要允许执行 PowerShell 脚本,我们需要将此 ExecutionPolicy 设置为 Unrestricted 或 Bypass。

我们可以使用以下任何 PowerShell 命令将当前用户的策略设置为 Bypass:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force

不受限制的策略会加载所有配置文件并运行所有脚本。如果您运行从 Internet 下载的未签名脚本,则会在运行前提示您获得许可。

而在 Bypass 策略中,没有任何内容被阻止,并且在脚本执行期间没有警告或提示。绕过 ExecutionPolicy 比 Unrestricted 更轻松。

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force; 告诉 VS2015 停止抱怨并运行我该死的脚本的又快又脏的方式。谢谢。救生员。

命令末尾的分号是多余的。

答6:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

在脚本之前运行此命令也可以解决问题:

Set-ExecutionPolicy Unrestricted

-1 - 遵循最少许可原则。在取消对您的安全策略的所有限制之前,至少将策略设置为 RemoteSigned。如果这不起作用,那么重新评估您的痛点是什么以及为什么它不起作用。您可以将 unrestricted 设置为最后的手段,但它不应该是您的起点。

也感谢您指出此选项。在充分尊重生产目的的安全需求的情况下,在快速原型能力需求如此之高的时代,所有的策略和安全性确实阻碍了完成工作。

关于评论重新原型设计,恐怕这就是糟糕的代码投入生产的原因。当然这只是一个琐碎的例子,但是如果你在开发过程中不能解决这个琐碎的事情,那就是担心发布。此外,对于定制代码,如果可以,请了解目标环境 - 我们将大部分内部系统设置为 Remotesigned。

答7:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

在 Windows 7 中:

转到开始菜单并搜索“Windows PowerShell ISE”。

右键单击 x86 版本并选择“以管理员身份运行”。

在顶部,粘贴 Set-ExecutionPolicy RemoteSigned;运行脚本。选择“是”。

对 64 位版本的 Powershell ISE(非 x86 版本)重复这些步骤。

我只是澄清@Chad Miller 暗示的步骤。谢谢乍得!

在 Windows 8 中,这也是有效的。我设置了 Set-ExecutionPolicy RemoteSigned;仅在 Windows Powershell 中,以管理员身份运行。 x86 版本无需重复该过程。

答8:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

如果您处于非管理员的环境中,您可以为您设置执行策略,并且不需要管理员。

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

或者

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted"

您可以在帮助条目中阅读所有相关信息。

Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full

在 Windows 8 中对我来说效果很好,即使作为管理员的 Set-ExecutionPolicy Unrestricted 似乎没有“无限制”到足以真正提供帮助。

我相信您可能遇到的是 GPO 或其他内容,它会覆盖您对 ExecutionPolicy 的“LocalMachine”级别的设置。您无法使用 Set-ExecutionPolicy 命令覆盖域策略的内容。但是,但设置“CurrentUser”访问级别,只有您才能拥有指定的执行策略。这是因为计算机在查看 LocalMachine 设置之前查看 CurrentUser 的执行策略。

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted" 是唯一对我有用的解决方案。谢谢

答9:

huntsbot.com – 高效赚钱,自由工作

RemoteSigned:您自己创建的所有脚本都将运行,并且从 Internet 下载的所有脚本都需要由受信任的发布者签名。

好的,只需键入以下内容即可更改策略:

Set-ExecutionPolicy RemoteSigned

正如其他帖子中所建议的那样:明智的做法是在有意义的情况下包含“-Scope CurrentUser”以获得更安全的策略。

答10:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

我使用的是 Windows 10,无法运行任何命令。给我一些线索的唯一命令是:

[x64]

打开 C:\Windows\SysWOW64\cmd.exe [以管理员身份] 运行命令> powershell Set-ExecutionPolicy Unrestricted

但这没有用。这是有限的。可能是 Windows10 的新安全策略。我有这个错误:

Set-ExecutionPolicy:Windows PowerShell 成功更新了您的执行策略,但该设置被在更具体范围内定义的策略覆盖。由于覆盖,您的 shell 将保留其当前有效的执行策略…

所以我找到了另一种方法(解决方案):

打开运行命令/控制台(Win + R)类型:gpedit.msc(组策略编辑器)浏览到本地计算机策略 -> 计算机配置 -> 管理模板 -> Windows 组件 -> Windows Powershell。启用“打开脚本执行”根据需要设置策略。我将我的设置为“允许所有脚本”。

现在打开 PowerShell 并享受 😉

这是独立安装,还是连接到工作组或域?

为什么要打开cmd来做呢?只需打开 ISE(以管理员身份)并输入 Set-ExecutionPolicy RemoteSigned

天哪,这终于修复了我的 win10 盒子,@kolob set-executionpolicy 还不够

您不应该使用 Unrestricted。最好使用 RemoteSigned

@xer0x 只要您以管理员身份运行 powershell 就应该

答11:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

以管理员身份打开 powershell

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

使用这个命令

原文链接:https://www.huntsbot.com/qa/nb3y/powershell-says-execution-of-scripts-is-disabled-on-this-system?lang=zh_CN&from=csdn

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值