PowerShell 错误“在此系统上禁用脚本执行”。
Posted
技术标签:
【中文标题】PowerShell 错误“在此系统上禁用脚本执行”。【英文标题】:PowerShell bug “execution of scripts is disabled on this system.” 【发布时间】:2019-07-13 13:14:20 【问题描述】:我有一个 power shell 脚本,它运行以停止服务、“停止/终止进程”、删除 2 个文件然后重新启动。
我可以在我的 Windows 10 64 位主机上完美运行此脚本 - 零问题。 我尝试在我的虚拟机中运行它,但出现错误
无法加载,因为在此系统上禁用了正在运行的脚本。有关详细信息,请参阅 https://go.microsoft.com/fwlink/?LinkID=135170 上的 about_Execution_Policies
所以只是为了咯咯笑,我去看了我的组策略,但它们都没有在两台机器上配置。
管理模板 > Windows 组件 > Windows PowerShell 未配置。
那么为什么是虚拟机上的问题而不是我的主机上的问题?
编辑 在 VM 上运行 Get-ExecutionPolicy 和 Get-ExecutionPolicy-List 受限
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Undefined
在我的主机上运行它
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Unrestricted
不知道我的本地机器是怎么改的——软件安装??
【问题讨论】:
在其中一台虚拟机上get-executionpolicy
命令的输出是什么?如果输出不是 RemoteSigned、Unrestricted 或 Bypass,则可能是您的问题。
AdminOfThings 对问题的扩展...对于运行脚本的帐户,该系统上的执行策略是什么?
如答案中所述 - Restricted
是默认的 PowerShell 执行策略。
@AdminOfThings 我了解默认设置是受限的。那么,如果两台机器都没有配置——即使根据我的组策略,为什么还要限制它呢?两者从一开始就在我的手中 - 新笔记本电脑,新 VM(我创建).. 没有更改策略,在 Grp Policy 中都说未配置。今天,get-executionpolicy 正在运行而没有给我错误 - 并且准确地说 - 一个是受限制的,一个是不受限制的。昨天刚吐出不允许我在机器上运行脚本的错误。
【参考方案1】:
以管理员身份使用powerShell并执行以下命令:
PS C:\WINDOWS\system32> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Unrestricted
CurrentUser Unrestricted
LocalMachine Unrestricted
取消限制执行策略:
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
在您的普通用户下。以下需要打开管理员实例:
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
作为管理员。
之后您可能需要重新启动计算机。
你会看到 peerjs 服务器正在工作
【讨论】:
已经有 10 个其他答案指示更改执行策略。【参考方案2】:我只是在使用以下命令将 ExecutionPolicy 设置为 RemoteSigned 所暗示的所有更改:Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
(我真的建议先看看提供的其他政策:Windows Execution Policies)
远程签名:
Windows 服务器计算机的默认执行策略。 脚本可以运行。 需要来自受信任的发布者的数字签名脚本和 从网上下载的配置文件 包括电子邮件和即时通讯程序。 不需要对写在 本地计算机,而不是从 Internet 下载的。 运行从 Internet 下载但未签名的脚本。 从 Internet 以外的来源运行未签名脚本的风险 以及可能是恶意的签名脚本。请注意,在 Windows 上,浏览器会对下载的文件进行签名并将其标记为“来自 Internet”。如果你想解锁这样的脚本,你可以使用 cmd Unblock-File
。
【讨论】:
【参考方案3】:以管理员身份使用powerShell并执行以下命令:
1-Set-ExecutionPolicy 远程签名
2-Get-ExecutionPolicy -List
3-Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine*
然后再次重新运行脚本,它将起作用
【讨论】:
【参考方案4】:问题最少的方法是使用命令:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
这将解决管理员用户权限问题。
【讨论】:
【参考方案5】:如果您在Windows
,请遵循以下内容:
-
按
[windows]
按钮,然后输入PowerShell
。
以Adiministrator
运行
复制并粘贴以下命令并点击[Enter]
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
-
输入
Y
并点击[Enter]
重新运行命令并输入A
命中[Enter]
关闭 powershell 并重试
祝你好运。
【讨论】:
【参考方案6】:以管理员身份运行powershell后
运行以下命令
1.Get-ExecutionPolicy -List 2.Set-ExecutionPolicy Unrestricted 3.Set-ExecutionPolicy Unrestricted -Force
(可能需要重启机器)
【讨论】:
【参考方案7】:我的电脑也遇到了同样的问题。以管理员模式打开 Windows PowerShell ISE 并运行 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
这个命令解决了我的问题。
【讨论】:
【参考方案8】:我在使用 VS Code 时遇到了同样的问题,然后我用管理员运行检查了 cmd。没有问题所以最好使用CMD简单的方法来解决这个问题
【讨论】:
这里也一样。它从 CMD 工作。例如,我在 VScode 终端中遇到了“eslint --int”问题。但是,它从 CMD 工作。 我也一样.. 尝试使用 CMD 提升。并为我工作。【参考方案9】:以管理员身份打开您的 powershell,然后粘贴这些命令:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
然后选择A
【讨论】:
【参考方案10】:打开你的 PowerShell 并输入以下命令
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
【讨论】:
以管理员身份使用 PowerShell 执行。【参考方案11】:以管理员身份运行 Powershell 并运行以下命令:
set-executionpolicy remotesigned
【讨论】:
【参考方案12】:我要在这里拼命地重演About Execution Policies的一部分。
Windows 客户端操作系统的默认执行策略是受限的。这意味着脚本不会自动运行。如果您的 VM 具有 Windows 客户端操作系统并且您从未更改过执行策略,那么您的问题是预期的。如果一台 Windows 10 机器正常工作,则说明有人更改了执行策略。
在有问题的 VM 上,您需要确定运行脚本的范围(或帐户)。然后你需要相应地设置执行策略。
如果您在以自己身份登录到服务器时测试运行脚本,那么您只需打开 PowerShell 控制台并运行以下命令:
Set-ExecutionPolicy RemoteSigned
然后在同一个控制台中运行脚本。
以下命令将列出该机器上所有作用域的执行策略:
Get-ExecutionPolicy -List
您应该在工作系统和非工作系统上比较上面的命令。您的问题可能是运行脚本的特定范围的执行策略设置。如果您阅读了我帖子中的链接,它应该可以帮助您确定需要具体更改的内容。
以下内容将允许所有本地脚本在 VM 上执行,无论它们是否已签名:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
【讨论】:
我进入了组策略并查看了两者 - 两者都未配置,我的笔记本电脑全新 8 个月了 - 从未接触过策略。我创建的 VM 并且当时我确实在 VM 上禁用了 UAC,这是否会导致问题。我今天能够运行获取执行策略(同一用户)我不知道为什么昨天由于上述错误而失败。还有一件事——如果我能够违反脚本执行策略,那么制定该策略的意义何在?似乎任何黑客都可以输入我可以输入的相同绕过代码:似乎更像是一个令人讨厌的标志,上面写着“远离”而不是任何有用的东西。 仅供参考:VM 是我主机的来宾 - 直接加载到我的主机上 - 我没有通过 Vsphere 安装等服务器登录。这只是我笔记本电脑上的一个独立虚拟机。您的答案今天在我的虚拟机中有效。我昨天试过了,就是不行。以上是关于PowerShell 错误“在此系统上禁用脚本执行”。的主要内容,如果未能解决你的问题,请参考以下文章
powershell powershell脚本的模板。使所有错误“终止”并在发生错误时发送邮件
powershell PowerShell:读取SQL错误日志