Windows系统PowerShell脚本执行策略

在Windows系统上搭建开发环境,使用nrm ls命令查看镜像源时,系统提示:“无法加载文件C:\Users\username\AppData\Roaming\npm\nrm.ps1,因为此系统上禁止运行脚本。”

解决办法

  1. 以管理员身份打开Windows PowerShell
  2. 输入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博客

PowerShell:因为在此系统上禁止运行脚本,解决方法 - 简书 (jianshu.com)

PowerShell 脚本执行策略 - sparkdev - 博客园 (cnblogs.com)