【问题标题】:PowerShell bug “execution of scripts is disabled on this system.”PowerShell 错误“在此系统上禁用脚本执行”。
【发布时间】: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 正在运行而没有给我错误 - 并且准确地说 - 一个是受限制的,一个是不受限制的。昨天刚吐出不允许我在机器上运行脚本的错误。

标签: powershell


【解决方案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,请遵循以下内容:

        1. 按[windows] 按钮,然后输入PowerShell。
        2. 以Adiministrator 运行
        3. 复制并粘贴以下命令并点击[Enter]
        Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
        
        1. 输入Y 并点击[Enter]
        2. 重新运行命令并输入A 命中[Enter]
        3. 关闭 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 安装等服务器登录。这只是我笔记本电脑上的一个独立虚拟机。您的答案今天在我的虚拟机中有效。我昨天试过了,就是不行。
                  猜你喜欢
                  • 2013-07-16
                  • 2022-11-10
                  • 2011-05-01
                  • 2021-10-27
                  • 2018-06-08
                  相关资源
                  最近更新 更多