解决“在此系统上禁用了脚本”错误
问题描述
当在Windows系统的PowerShell或VS Code终端中运行Ionic、Angular CLI、React Native等框架的命令时(如ionic serve
),可能会遇到以下安全错误:
powershell
ionic : File C:\Users\Lakshan\AppData\Roaming\npm\ionic.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see
about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ ~~~~~
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
这个错误表明当前系统的PowerShell执行策略限制了脚本的运行,这是Windows系统的默认安全设置。
解决方案
方法一:永久更改执行策略(推荐)
这是最常用的解决方案,会永久改变系统的执行策略:
- 以管理员身份打开PowerShell
- 运行以下命令:
powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
- 输入
Y
确认更改
方法二:仅对当前用户更改执行策略
如果你没有管理员权限或只想为当前用户更改设置:
powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
系统会提示你输入执行策略值,可以输入 RemoteSigned
、Bypass
或 Restricted
。
方法三:临时解决方案(仅当前会话有效)
如果只需要临时解决当前终端会话的问题:
powershell
Set-ExecutionPolicy RemoteSigned -Scope Process
这个方法只在当前PowerShell会话有效,关闭后会自动恢复原设置。
执行策略详解
PowerShell提供了多种执行策略级别:
- Restricted:默认设置,不允许任何脚本运行
- RemoteSigned:推荐设置,允许本地未签名脚本,远程脚本需要数字签名
- Unrestricted:允许所有脚本运行,但有安全风险
- Bypass:不阻止任何操作,也没有警告提示
- AllSigned:所有脚本都需要数字签名
安全建议
推荐使用 RemoteSigned
策略,它在安全性和实用性之间取得了良好平衡。
验证更改
更改执行策略后,可以通过以下命令验证:
powershell
Get-ExecutionPolicy
如果需要查看所有作用域的执行策略:
powershell
Get-ExecutionPolicy -List
补充说明
这个错误通常出现在使用npm全局安装的CLI工具(如Ionic、Angular CLI等)时,因为这些工具会创建PowerShell脚本来包装JavaScript入口点。
注意
请始终从可信来源下载和运行脚本,即使更改了执行策略也要保持警惕。