当前位置:首页 > 技术文章 > 正文内容

无法加载文件,因为在此系统上禁止运行脚本?终级解决方案!

问题原因

你遇到的这个错误信息: 无法加载文件 C:\Program Files\nodejs\vue.ps1,因为在此系统上禁止运行脚本。

意思是,Windows PowerShell 的 执行策略 (Execution Policy) 阻止了你运行 vue.ps1 这个脚本文件。

  • 什么是 PowerShell 执行策略? 这是 Windows 的一项安全功能,旨在防止用户意外运行恶意脚本。默认情况下,很多 Windows 系统的执行策略被设置为 Restricted(受限制),这意味着它不允许运行任何 .ps1 脚本文件。
  • 为什么运行 vue 命令会触发这个? 当你在 Windows 上通过 npm 或 yarn 全局安装了 Vue CLI (@vue/cli) 后,它会创建一个名为 vue 的命令。在 PowerShell 环境中,这个 vue 命令实际上是指向 vue.ps1 这个 PowerShell 脚本的。因此,每次你运行 vue create ...vue --version 时,都在尝试执行这个脚本,从而触发了安全策略。

解决方案

你需要更改 PowerShell 的执行策略,允许脚本运行。推荐使用 RemoteSigned 策略,它在安全性和便利性之间取得了很好的平衡。

RemoteSigned 策略的含义是:

  • 可以运行本地创建的脚本。
  • 从网络上下载的脚本,必须有受信任的发布者的数字签名才能运行。

对于开发来说,这个策略足够安全且方便。

操作步骤 (推荐)

你需要以管理员身份打开 PowerShell 来执行这个更改。

  1. 以管理员身份打开 PowerShell点击 开始 菜单。输入 PowerShell。在搜索结果中找到 "Windows PowerShell"。右键点击它,选择 “以管理员身份运行”
  2. 查看当前的执行策略 (可选) 在打开的管理员 PowerShell 窗口中,输入以下命令并回车,可以查看当前的策略。你很可能会看到 Restricted
  3. Get-ExecutionPolicy
  4. 设置新的执行策略 输入以下命令,然后按回车。
  5. Set-ExecutionPolicy RemoteSigned
  6. 确认更改 系统会询问你是否要更改执行策略,输入 Y (是) 或 A (全是),然后按回车。
  7. 执行策略更改 执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略? [Y] 是(Y) [A]全是(A) [N] 否(N) [L] 全不是(L) [S] 暂停(S) [?] 帮助 (默认值为“N”): A
  1. 验证更改 再次运行 Get-ExecutionPolicy,确认策略已经变为 RemoteSigned
  2. 完成! 现在,你可以关闭这个管理员 PowerShell 窗口,然后重新打开一个普通的终端(比如 VS Code 的集成终端、Windows Terminal 或者普通的 PowerShell/CMD 窗口),再次尝试运行你的 vue 命令,它应该可以正常工作了。
  3. vue --version # 或者 vue create my-awesome-project

其他方案 (如果不想更改全局策略)

如果你没有管理员权限,或者不想更改整个系统的策略,你可以只为当前进程设置策略。

在你需要运行 vue 命令的那个终端窗口里,首先执行以下命令:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
  • -Scope Process:表示此设置仅对当前的 PowerShell 窗口有效,关闭后即失效。
  • -ExecutionPolicy Bypass:表示忽略所有策略,直接运行。

优点

  • 不需要管理员权限。
  • 不会永久性地改变系统安全设置。

缺点

  • 每次打开新的终端窗口需要重新运行一次这个命令。

总结

方案

命令

管理员权限

效果

推荐度

推荐方案

Set-ExecutionPolicy RemoteSigned

需要

一次性设置,永久有效

临时方案

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

不需要

仅对当前窗口有效

对于大多数开发者来说,第一种方案是最佳选择,一劳永逸地解决了类似问题。

相关文章

Vue3开发极简入门(14):组件间通信之props、ref&defineExpose

组件间的关系可以分为:父子关系。以前文的代码为例,最典型的就是App.vue与Car.vue这种,APP是父,Car是子。祖孙关系。如果Car再引入一个子组件,这个子组件与App就是祖孙关系。其他。比...

vue 3 学习笔记 (八)——provide 和 inject 用法及原理

在父子组件传递数据时,通常使用的是 props 和 emit,父传子时,使用的是 props,如果是父组件传孙组件时,就需要先传给子组件,子组件再传给孙组件,如果多个子组件或多个孙组件使用时,就需要传...

10分钟搞定gitlab-ci自动化部署(gitlab ci 配置)

gitlab-ci 是持续集成工具/自动化部署工具,类似 jenkins。持续集成 是将代码集成到共享存储库并尽可能早地自动构建/测试每个更改的实践 - 通常一天几次。概述在编码完成时都会进行打包发布...

GitLab-合并请求(gitlab合并请求合并者还原图解)

描述合并请求可用于在您对项目进行的其他人员之间交换代码,并轻松与他们讨论更改。合并请求的步骤步骤1-在创建新的合并请求之前,GitLab中应该有一个创建的分支。您可以参考本章来创建分支-步骤2-登录到...

使用Java统计gitlab代码行数(统计github代码行数的方法)

使用Java统计gitlab代码行数一、背景:需要对当前公司所有的项目进行代码行数的统计二、 可实现方式1.脚本:通过git脚本将所有的项目拉下来并然后通过进行代码行数的统计样例:echo 创建项目对...

解决GitLab报错:not allowed to force push code to a protected branch

当 force push 代码的时候,可能会遇到如下错误:You are not allowed to force push code to a protected branch on this pr...