一、背景及原因
1.背景
走visual studio code的终端无法跑动gulp,vue的命令行,报错:
无法加载文件C:\Program Files\nodejs\XXX.ps1的消息
而在cmd
的窗口这些命令却可以使用。
2.原因
visual studio code的终端是powershell
对应走nodejs文件下指令的后缀为.ps1
的命令行文件进行指令执行。
cmd
的窗口则是走.cmd
后缀的命令行文件执行指令。
这里报错的缘故是因为.ps1
的使用权限不足,需要给足权限。
二、解决方法
1.以window11为主,走搜索查询powerShell窗口,以管理员的方式打开:
2.输入get-executionpolicy
查询当前的执行指令的权限等级:【我的显示如下:全局都是严格模式】
3.输入set-executionpolicy
设置当前的执行指令的权限等级为:remotesigned【这里说我的全局权限下有不同的属性设置的策略中有权限覆盖了我的操作,我的操作被覆盖,无法成功】
4.根据提示,输入get-executionpolicy -list
,查看全局的指令策略列表数据详情:
5.可以看到列表的红框内,该策略是Restricted
模式,由于这个属性的权限大,所以我的策略权限就被覆盖掉了,这时我再设置:set-executionpolicy remotesigned CurrentUser
,即可更改该属性策略的权限
6.最后再查询一下全局的指令执行策略权限:
重新到visual studio code执行gulp命令,成功执行:
三、关于powerShell的指令执行策略权限的简要解释微软官方说明
共有7种指令策略执行权限【对windows操作系统】
AllSigned: 全签模式
(1)可以运行脚本
(2)要求所有脚本和配置文件都是受信任发布者签名的,包括本地计算机编写的脚本
(3)运行来自计算机尚未归类为受信任和不受信任的发布者脚本之前进行提示
(4)存在有运行到有签名却是恶意脚本的风险
Bypass: 不请示绕道模式
(1)没有任何内容被阻止,也没有警告或提示直接绕开策略执行
(2)此执行策略适用于将powershell脚本内置到较大应用程序的配置中,或者适用于powershell是具有自己的安全模型的程序的基础配置
Default: 默认模式
(1)设置默认执行策略
(2)受限于windows客户端
(3)用于windows服务器端的remotesigned
RemoteSigned: 远程签名模式
(1)windows 服务器端的默认执行模式
(2)可以运行脚本
(3)需要受信任的发布者对从Internet下载的脚本及配置文件(包括电子邮件和即时消息程序)进行数字签名
(4)本地计算机上编写的,不是从Internet上下载的脚本不需要进行数字签名
(5)从Internet下载但没有签名的脚本,可使用 `Unblock-File`cmdlet执行
(6)但存在运行来自Internet以外没有进行签名及恶意脚本的风险
Restricted: 受限制模式
(1)windows 客户端的默认执行模式
(2)允许单个命令,不允许执行脚本
(3)阻止运行所有脚本文件,包括格式化和配置化文件(.ps1xml)、模块脚本文件(.psm1)和powerShell配置文件(.ps1)
Undefined: 不明确限制模式
(1)当前范围内没有特别明确的执行策略
(2)如果所有执行指令的范围都是undefined,则确定的有效策略是对于windows 客户端是restricted模式,对于windows 服务器端是remotesigned模式
Unrestricted: 不受限制模式
(1)不是window计算机的默认执行模式,无法更改
(2)没有数字签名的脚本可以运行,存在恶意脚本执行的风险
(3)在运行非本地internet网的脚本及配置文件时警告用户