1. 复现问题
今天,在Windows PowerShell
中执行Set-ExecutionPolicy RemoteSigned
,却报出如下错误:
Set-ExecutionPolicy
: 对注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
的访问被拒绝。 要更改默认(LocalMachine)作用域的执行策略,请使用“以管理员身份运行”选项启动Windows PowerShell
。要更改当前用户的执行策略,请运行Set-ExecutionPolicy -Scope CurrentUser
。
2. 分析问题
我们注意图中这句话:
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险
我们执行Set-ExecutionPolicy RemoteSigned
,即是修改它的安全执行策略,这样可能会产生风险。
我们不妨打开它提供的链接看看,如下所示:
PowerShell
执行策略是一项安全功能,用于控制PowerShell
加载配置文件和运行脚本的条件。
此功能有助于防止恶意脚本的执行。
我们可以跳过这一段长说明
,鼠标向下滑动直至找到RemoteSigned
的说明,如下所示:
当然,这个说明了解即可,不用过多研究它。
通过对链接文档的分析,发现没有解决我的问题。
此时,我们再回头研究上图中的错误信息,他说了两句重要的话:
-
要更改默认(
LocalMachine
)作用域的执行策略,请使用以管理员身份运行
选项启动Windows PowerShell
-
要更改当前用户的执行策略,请运行
Set-ExecutionPolicy -Scope CurrentUser
。
LocalMachine
和CurrentUser
在哪里,我们可以通过如下命令查看:
Get-ExecutionPolicy -List
LocalMachine
和CurrentUser
是执行策略的作用域,还有其他的作用域,如下图所示:
执行策略的作用域了解完后,我们不更改默认(LocalMachine
)作用域,只是更改当前用户的执行策略,来解决我们的问题。
3. 解决问题
- 我们在左下角的搜索框,输入
powershell
,以管理员身份运行,或直接打开都可以,如下图所示:
若你不想使用搜索框,可以直接按window + r
,输入PowerShell
(蓝色运行屏幕) ,也可以cmd
(黑色运行屏幕),点击确定即可:
- 在
Windows PowerShell
中执行命令:Set-ExecutionPolicy -Scope CurrentUser
接着提示我们输入执行策略(ExecutionPolicy
),我们把此策略RemoteSigned
输入进去,如下图所示:
当然,如果你觉着Set-ExecutionPolicy -Scope CurrentUser
比较麻烦,我们可以直接执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
,如下图所示:
- 输入
get-ExecutionPolicy
来验证是否成功,若系统回复Restricted
,表示状态是禁止的,反之是成功的。
4. 解决该错误的其他方法
如果我的方法无法解决你的问题,可以参考如下解决方法。
-
输入
set-ExecutionPolicy RemoteSigned
,出现选择条件,输Y
,试一下。 -
可能
node
版本较低。
建议把node
卸载了,重新安装高于node 16
的版本,比如node16.15.0
,然后再尝试。
现在好像是16
以下的版本不在更新维护了。
有时,node
版本也会影响这个配置。