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错误处理

powershell PowerShell错误

powershell PowerShell:读取SQL错误日志

powershell PowerShell:来自InnerException的错误消息

Windows powershell 总是运行不了,提示第一行第一个字符错误