修改执行策略,解决PowerShell禁止运行脚本

在Windows系统里,PowerShell支持比传统CMD命令行更丰富的命令和模块。然而,开发者可能会遇到PowerShell无法执行命令的问题,以下是我的经历。

问题

我有个使用NPM管理的开发项目。为了升级这个项目的依赖包版本,我在PowerShell里定位到该项目路径,执行npm-check-updates命令。然而,PowerShell返回了错误信息,提示“无法加载文件,因为在此系统上禁止运行脚本。

起初我以为是软件环境配置不当。但之后我确认npm-check-updates以全局形式正确安装,并且已在系统的环境变量中添加了它的路径。我尝试使用命令提示符执行同样的命令,居然能正常运行!然而,我不想放弃PowerShell运行命令的便利。

根据错误提示信息,我找到了处理办法。

解决方法

在PowerShell里执行这条命令:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

该命令立即生效,然后就可以在PowerShell正常执行NPM的各种全局命令。

解释

是PowerShell的执行策略阻止了命令执行。

PowerShell执行策略是一项安全功能,用于控制加载配置文件和运行脚本的条件。此功能有助于防止恶意脚本的执行。

这里可以查看有关PowerShell执行策略的详细资料。

可通过以下命令,获取当前有效的执行策略:

Get-ExecutionPolicy

Windows客户端系统的默认执行策略是Restricted,意味着阻止运行所有脚本文件,包括格式和配置文件(.ps1xml)、模块脚本文件(.psm1)和PowerShell配置文件(.ps1)。所以,NPM包的全局命令就被PowerShell阻止执行。

如果要对指定的作用域设置执行策略,执行以下命令:

Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>

其中,<PolicyName><scope>要替换为相应的值,可在上面链接的详细资料里查询。

前面的解决方法里的那条命令,意思是对当前用户应用RemoteSigned策略。这是一种以较小权限获得资格来执行脚本的办法。

如果要删除当前用户的执行策略,恢复系统默认状态,可执行如下命令:

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser

Profile picture

一个充满好奇心的冒险家,喜爱科技与艺术。用文字记录生活的点滴,分享观察与思考、经验与感悟。无惧艰难险阻,幸福就在你我身边。