问题

这几天着手将之前的基于Hugo做的博客迁移到Hexo过来,需要安装Node.js相关。

系统上之前有node.js,是通过nvm安装的,只是版本有点低,所以升级看看,但升级问题就来了,系统提示:

1
2
3
4
5
无法加载文件 \*\*.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。

+ CategoryInfo : SecurityError: (:) [],ParentContainsErrorRecordException

+ FullyQualifiedErrorId : UnauthorizedAccess

一下就感觉不爽了!怎么就不行了呃,以前都可以的!(好像是2年前了 ~:> )

既然遇到了,那就解决吧!

解决办法

在Windows搜索栏中输入powershell

然后以管理员身份运行,如上图。
接着输入命令:

1
get-executionpolicy


通过命令看到,这里是 Restricted
然后我们把它改了,输入如下命令。

1
set-executionpolicy remotesigned


系统提示多个选项,我们选择输入Y,然后回车。
这样,上边的问题就解决了!!

原因

Windows系统考虑安全因素,对Powershell脚本的执行进行了策略控制,这里默认就是Restricted
脚本执行策略有七种:

AllSigned

  • 脚本可以运行。
  • 要求所有脚本和配置文件都由受信任的发布者签名,包括在本地计算机上编写的脚本。
  • 从尚未分类为受信任或不受信任的发布者运行脚本之前,会提示你。
  • 运行已签名但恶意脚本的风险。

Bypass

  • 不阻止任何操作,并且没有任何警告或提示。
  • 此执行策略适用于 PowerShell 脚本内置于较大应用程序的配置,或针对 PowerShell 是具有自身安全模型的程序基础的配置。

Default

  • 设置默认执行策略。
  • Restricted 适用于 Windows 客户端的 。
  • 适用于 Windows 服务器的 RemoteSigned

RemoteSigned

  • Windows Server 计算机的默认执行策略。
  • 脚本可以运行。
  • 需要受信任的发布者对从 Internet 下载的脚本和配置文件(包括电子邮件和即时消息程序)的数字签名。
  • 不需要在本地计算机上编写且未从 Internet 下载的脚本上使用数字签名。
  • 如果未阻止脚本(例如使用 cmdlet),则运行从 Internet 下载且未签名的 Unblock-File 脚本。
  • 运行来自 Internet 以外的源的未签名脚本以及可能是恶意的已签名脚本的风险。

Restricted

  • Windows 客户端计算机的默认执行策略。
  • 允许单个命令,但不允许脚本。
  • 阻止运行所有脚本文件,包括格式化和配置文件 ( .ps1xml) 、模块脚本文件 (.psm1) ,以及 PowerShell 配置文件 ( .ps1) 。

Undefined

  • 当前范围内没有设置执行策略。
  • 如果所有范围内的执行策略都是 Undefined,则有效的执行策略 Restricted 适用于 Windows 客户端, RemoteSigned 适用于 Windows Server。

Unrestricted

  • 非 Windows 计算机的默认执行策略,无法更改。
  • 未签名的脚本可以运行。 存在运行恶意脚本的风险。
  • 在运行不来自本地 Intranet 区域的脚本和配置文件之前警告用户。

参考文档: