Skip to content

解决“在此系统上禁用了脚本”错误

问题描述

当在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系统的默认安全设置。

解决方案

方法一:永久更改执行策略(推荐)

这是最常用的解决方案,会永久改变系统的执行策略:

  1. 以管理员身份打开PowerShell
  2. 运行以下命令:
powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
  1. 输入 Y 确认更改

方法二:仅对当前用户更改执行策略

如果你没有管理员权限或只想为当前用户更改设置:

powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

系统会提示你输入执行策略值,可以输入 RemoteSignedBypassRestricted

方法三:临时解决方案(仅当前会话有效)

如果只需要临时解决当前终端会话的问题:

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入口点。

注意

请始终从可信来源下载和运行脚本,即使更改了执行策略也要保持警惕。