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

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

zonemu2个月前 (07-28)技术文章27

问题原因

你遇到的这个错误信息: 无法加载文件 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开发极简入门(15.1):emits补完-结合v-model

之前代码是通过按钮触发emit,如果希望输入框里的内容在输入之后也能同步到父组件,就可以结合v-model的update事件来操作,具体如下。Son2.vue:<template>...

学习ES6- 入门Vue(大量源代码及笔记,带你起飞)

ES6学习网站: https://es6.ruanyifeng.com/箭头函数普通函数//普通函数 this 指向调用时所在的对象(可变) let fn = function fn(a, b) {...

VIM配置整理(vim配置教程)

一、基本配色set number set showcmd set incsearch set expandtab set showcmd set history=400 set autoread se...

「云原生」Containerd ctr,crictl 和 nerdctl 命令介绍与实战操作

一、概述作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使用,只是大部分时候我们因熟悉Docker,在部署集群时采用了默认的dockers...

100行Html5+CSS3+JS代码实现元旦倒计时界面

一、前言2022年到了,祝大家虎年大吉喜气临,昂首摆尾迎春来。双眼圆睁看世界,万水千山尽开颜。胡须翘翘美姿态,人人开心祝平安。巨大身躯摇摆摆,坎坷困境当笑谈。愿你虎年万事顺,吉星高照旺旺旺!二、202...

HTML5与APP的抉择(h5与app的区别)

同为当下炙手可热的技术,围绕APP和HTML5难免少不了各种争辩。而在“互联网+”时代,许多面临转型的传统企业,也在选择转型工具时,陷入了HTML5或APP的纠结抉择之中……到底该选择HTML5还是A...