在Windows系统上搭建开发环境,使用nrm ls命令查看镜像源时,系统提示:“无法加载文件C:\Users\username\AppData\Roaming\npm\nrm.ps1,因为此系统上禁止运行脚本。”
解决办法
- 以管理员身份打开Windows PowerShell
- 输入
set-ExecutionPolicy RemoteSigned
,出现提示后输入y
确定
探究原因
Windows为了防止恶意脚本的执行,设计了脚本执行策略(Execution Policy)。我们可以在不同的应用场景中设置不同策略来防止恶意脚本的执行。
PowerShell 提供了 Restricted、AllSigned、RemoteSigned、Unrestricted、Bypass、Undefined 六种类型的执行策略,简单介绍如下:
Restricted
可以执行单个的命令,但是不能执行脚本。我所遇到的问题就是因为系统默认策略为Restricted,而nrm ls命令去执行了脚本。
AllSigned
Signed 在这里指有数字签名的脚本,也就是说 AllSigned 执行策略允许执行所有具有数字签名的脚本。但其实我们能见到的绝大多数的 PowerShell 脚本是没有数字签名的。
RemoteSigned
这个执行策略的意思是:当执行从网络上下载的脚本时,需要脚本具有数字签名,否则不会运行这个脚本。如果是在本地创建的脚本则可以直接执行,不要求脚本具有数字签名。
Unrestricted
这是一种比较宽容的策略,允许运行未签名的脚本。
对于从网络上下载的脚本,在运行前会进行安全性提示,但仍然运行运行。
Bypass
Bypass 执行策略对脚本的执行不设任何的限制,任何脚本都可以执行,并且不会有安全性提示。
Undefined
Undefined 表示没有设置脚本策略。当然此时会发生继承或应用默认的脚本策略。
参考及引用:
nrm : 无法加载文件 C:\Users\TANG\AppData\Roaming\npm\nrm.ps1,因为在此系统上禁止运行脚本_ougexingfuba的博客-CSDN博客