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的脚本(hexo.ps1)执行被禁止。
那么目前的本地win10系统的执行策略是什么样子的呢?
以下命令可获取当前系统有效的执行策略:(Restricted的含义可以在上面的链接有,后续也有讲)
PS C:\Users\PC> Get-ExecutionPolicy
Restricted
看一下Restricted的定义,知道会阻止运行所有的脚本文件,所以上面的hexo.ps1脚本文件的运行被禁止了。
知道了目前的执行策略是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】
3,如何解决?
找到原因之后,怎么解决?
从上面的影响机器的执行策略list,这里看到,所有都是所有范围的策略都是Undefined的话,上面如果是Windows Server的有效执行策略为RemoteSigned(我估计是如果是服务器的话,有更多的脚本执行的需求,所以设置的是比Restricted更宽松一点的RemoteSigned)。
如果将会话的执行策略从Restricted变成RemoteSigned,应该可以执行hexo.ps1。
更改执行策略:windows图标-> 设置 -> 输入开发者,点击【开发者设置】->[应用以下设置以执行Powershell脚本]的地方,点击【应用】->该设置颜色变灰
查看一下最新的执行策略:变成了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就可以正常执行了。