【博客搭建记录贴】问题记录:hexo : 无法加载文件 C:\Program Files\nodejs\hexo.ps1,因为在此系统上禁止运行脚本。

1,背景

hexo(博客框架)安装完毕之后,正准备看看其版本,发现出现下面脚本禁止运行的错误。

PS C:\Users\PC> hexo -v
hexo : 无法加载文件 C:\Program Files\nodejs\hexo.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.micros
oft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
所在位置 行:1 字符: 1
+ hexo -v
+ ~~~~
    + CategoryInfo          : SecurityError: (:) [],PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

2,原因

看它的提示中的链接:https:/go.microsoft.com/fwlink/?LinkID=135170

PowerShell 中有执行策略的解释如下:

【博客搭建记录贴】问题记录:hexo : 无法加载文件 C:\Program Files\nodejs\hexo.ps1,因为在此系统上禁止运行脚本。_第1张图片

这边因为有执行策略的限制,导致hexo的脚本(hexo.ps1)执行被禁止
那么目前的本地win10系统的执行策略是什么样子的呢?
以下命令可获取当前系统有效的执行策略:(Restricted的含义可以在上面的链接有,后续也有讲)

PS C:\Users\PC> Get-ExecutionPolicy
Restricted

看一下Restricted的定义,知道会阻止运行所有的脚本文件,所以上面的hexo.ps1脚本文件的运行被禁止了。

【博客搭建记录贴】问题记录:hexo : 无法加载文件 C:\Program Files\nodejs\hexo.ps1,因为在此系统上禁止运行脚本。_第2张图片
知道了目前的执行策略是Restricted,再看一下影响当前会话的所有执行策略,看看是什么导致执行策略变成了Restricted?命令【Get-ExecutionPolicy -List】:

PS C:\Users\PC> Get-ExecutionPolicy -List  #若要获取影响当前会话的所有执行策略,并按优先级顺序显示它们

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined

这里发现各个scope上的策略都是Undefined,看一下Undefined的解释知道:因为各个scope上面都是undefined,所以windows客户端来说,默认的有效执行策略变成了【Restricted】
【博客搭建记录贴】问题记录:hexo : 无法加载文件 C:\Program Files\nodejs\hexo.ps1,因为在此系统上禁止运行脚本。_第3张图片
 

3,如何解决?

找到原因之后,怎么解决?
从上面的影响机器的执行策略list,这里看到,所有都是所有范围的策略都是Undefined的话,上面如果是Windows Server的有效执行策略为RemoteSigned(我估计是如果是服务器的话,有更多的脚本执行的需求,所以设置的是比Restricted更宽松一点的RemoteSigned)。

如果将会话的执行策略从Restricted变成RemoteSigned,应该可以执行hexo.ps1。
【博客搭建记录贴】问题记录:hexo : 无法加载文件 C:\Program Files\nodejs\hexo.ps1,因为在此系统上禁止运行脚本。_第4张图片

更改执行策略:windows图标-> 设置 -> 输入开发者,点击【开发者设置】->[应用以下设置以执行Powershell脚本]的地方,点击【应用】->该设置颜色变灰

【博客搭建记录贴】问题记录:hexo : 无法加载文件 C:\Program Files\nodejs\hexo.ps1,因为在此系统上禁止运行脚本。_第5张图片

【博客搭建记录贴】问题记录:hexo : 无法加载文件 C:\Program Files\nodejs\hexo.ps1,因为在此系统上禁止运行脚本。_第6张图片

查看一下最新的执行策略:变成了RemoteSigned

PS C:\Users\PC> Get-ExecutionPolicy
RemoteSigned
PS C:\Users\PC> Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser    RemoteSigned
 LocalMachine       Undefined

hexo -v就可以正常执行了。

你可能感兴趣的:(05.博客搭建,hexo,powershell,脚本执行)