为什么PowerShell无法运行Angular命令?

339
我开始学习Angular,但我注意到在Windows中使用PowerShell时,每当我执行类似Angular命令的时候会出现错误。
ng new new-app

或者

ng serve

这是我得到的错误信息:
ng : File C:\Users\< username >\AppData\Roaming\npm\ng.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
+ ng serve
+ ~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

P.S. 我在命令提示符中尝试了这些命令,它们有效。

你能运行 Get-ExecutionPolicy 并提供输出吗?此外,你能否转到 C:\Users\<username>\AppData\Roaming\npm 并打开 ng.ps1 的属性,查看是否有一个标记框,指示“已阻止”,如果是,请取消选中它。 - Jacob
4
我认为最好的方法是在我完成所有操作后移除ng.ps1,这样一切就会再次正常运作。 - Amir Makram
2
@TheFabio 实际上,我可能永远不会知道,删除了ng.ps1之后,一切都进行得非常顺利。 - Amir Makram
我的执行策略并不是问题,而是我发送参数的方式有误。如果你也遇到了同样的问题,请查看在 Powershell 中执行带参数的 Angular Serve 失败 - ΩmegaMan
@AmirMakram 先生,这个问题与 javascript 语言无关,请不要添加 javascript 标签。 - Mina
8个回答

864

从目录C:\Users\%username%\AppData\Roaming\npm\中删除ng.ps1,然后尝试清除C:\Users\%username%\AppData\Roaming\npm-cache\的npm缓存。


160
我知道清除缓存对我来说并不是必要的。 - Edwin Lambregts
4
好的,但为什么?它是之前安装 Angular 时留下来的,现在没有被正确调用吗?为什么它不再起作用了? - Patrick
2
其实,我不知道。 我甚至没有在任何地方找到有关此文件的提及,所以我认为这个文件真的没有必要,所以我只是将它删除了。 - Amir Makram
我在C:\Users[username]\AppData\Roaming\npm文件夹中有"ng.ps1"(以及"ng.cmd"、"ng"和"node_modules"文件夹)。当我运行ng update时,它们是在2天前(重新)创建的(我检查了修改日期)。在此更新之后(当前版本为8.3.21,先前版本为8.3.xx),ng停止与Powershell一起工作。删除它(重命名)解决了问题。不需要清除缓存,但在VS Code中,您需要关闭并重新打开终端。也许Angular直接将"ng"命令引入为powershell脚本,但这导致了这个常见的权限问题?! - Alex 75
6
为了解释为什么这个方法有效:Windows默认会阻止运行未签名的PowerShell脚本,因为存在安全问题。但奇怪的是,Angular团队为什么会使用这个脚本,因为它会破坏Angular CLI,并且启用未签名脚本执行的系统是少数。移除这个PowerShell脚本只是停止了PowerShell尝试执行.ps1文件并回退到旧的cmd脚本,这也是可行的,但从未受到微软的限制。 - Dominik Szymański
显示剩余4条评论

643
我通过运行下面的命令解决了我的问题: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

1
有关编程的信息,请访问以下网址:http://go.microsoft.com/fwlink/?LinkID=135170 - Ahmed Nabil
14
这应该是新安装的正确答案。 - Chris
2
在此注释后,我输入“a”来应用于所有策略。谢谢! - Meysam Bagheri
1
我已在我的电脑上执行了相同的操作。它成功了。非常感谢您的分享。 - Antony Sampath Kumar Reddy
2
这在某些企业环境中失败,因为我们无法设置这些权限。 - Adam Hughes
显示剩余3条评论

40
无法加载,因为在该系统上禁用了运行脚本。有关更多信息,请参见http://go.microsoft.com/fwlink/?LinkID=135170的about_Execution_Policies。

这种错误是由于一项安全措施而发生的,它不允许在您没有批准的情况下在您的系统上执行脚本。您可以通过使用管理员权限打开powershell(在主菜单中搜索powershell并从上下文菜单中选择以管理员身份运行)并输入以下内容来批准:

set-executionpolicy remotesigned

为什么其他人使用相同的版本却没有遇到与我相同的问题,我为什么需要特别这样做? - Yogurtu

10

2
这个错误是由于一项安全措施导致的,该措施不允许在您未经批准的情况下在您的系统上执行脚本。
解决方案: 1. 打开Windows PowerShell 2. 执行以下命令: set-ExecutionPolicy RemoteSigned -Scope CurrentUser

2
步骤1:使用以下命令获取您的计算机执行策略
Get-ExecutionPolicy -List

步骤2:一旦设置了您的身份范围和执行策略,请使用相同的设置运行以下命令。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

如果上述方法不起作用,请安装 Angular 所需的最低 Node 版本并运行以下命令。
npm install -g @angular/cli

如果你想处理多个节点版本,可以按照以下方式使用 nvm;

https://www.freecodecamp.org/news/node-version-manager-nvm-install-guide/


值得记住的是,在应用该命令后,'ng'命令的操作是立即生效的,我甚至不需要将应用程序(VSCode)提升为管理员权限。 - Misael C. Homem
值得记住的是,在应用该命令之后,'ng'命令的操作是立即生效的,我甚至不需要以管理员身份提升应用程序的权限(VSCode)。 - undefined

0
你可以尝试Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
运行此命令时需要注意以下重要事项:
  1. 从项目文件夹中运行ng
  2. 检查ng版本
  3. 检查是否正确安装angular cli,或者可以通过运行npm install -g @angular/cli重新安装

-5

打开Windows PowerShell,以管理员身份运行,并将Set-ExecutionPolicy设置为Unrestricted,然后它就可以工作了。


11
欢迎来到SO,请提供相应的命令以完成任务。 - Saeed Zhiany
1
这是一个相当糟糕的建议,因为它打开了在您的系统上运行任何PowerShell脚本的大门。 - 1nternetz
2
如在之前的回答中所述,Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser 是更好的选择,因为它不容易打开您的系统来运行恶意脚本。RemoteSigned
  1. 脚本必须由受信任的发布者签名。
  2. 作用域设置为当前用户,而不是默认的LocalMachine。
有关详细信息,请参见Microsoft的文档。 https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.1
- 1nternetz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接