electron - node.js - ng : 无法加载文件路径\ng.ps1,因为在此系统上禁用了运行脚本

Posted

技术标签:

【中文标题】electron - node.js - ng : 无法加载文件路径\\ng.ps1,因为在此系统上禁用了运行脚本【英文标题】:electron - node.js - ng : file path\ng.ps1 cannot be loaded because running scripts is disabled on this systemelectron - node.js - ng : 无法加载文件路径\ng.ps1,因为在此系统上禁用了运行脚本 【发布时间】:2020-03-11 18:58:37 【问题描述】:

我正在尝试在Visual Studio Code 中的Windows 10 上编译一个项目,我的设置如下:

1) npm 版本6.12

2)Node.js版本12.13

3)Angular CLI: 8.3.19

我遇到的问题是,一旦我尝试运行ng serve,我就会收到以下输入:ng : File C:\Users\name\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.

到目前为止我尝试了什么

1) 我去网站上建议,发现Set-ExecutionPolicy -ExecutionPolicy RemoteSigned应该是我必须在shell中输入的命令。因此我所做的是:

PS C:\Users\raggi\OneDrive\Desktop\pitalkdashboard> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

但这导致了以下错误:

Set-ExecutionPolicy : Access to the registry key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell is denied. To change the execution policy for the default (LocalMachine) scope, start Windows PowerShell with the "Run as administrator" option. To change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".

这正是我所做的,所以按顺序:

PS C:\Users\raggi\OneDrive\Desktop\pitalkdashboard> Set-ExecutionPolicy -Scope CurrentUser

下面是Shell提示的,我只需要插入RemoteSigned

cmdlet Set-ExecutionPolicy at command pipeline position 1

Supply values for the following parameters:

ExecutionPolicy: RemoteSigned

之后,我尝试ng serve 启动整个项目,但收到不同的错误,我将其放在打印屏幕下方,因为它太长了:

对这条路线没有更多的想法。

2) 建议here 和also here

我尝试以administrator 的身份访问和运行,如下面的打印屏幕所示:

但我在 shell 上看到的唯一内容如下(但是 shell 立即消失了,我只来得及打印屏幕)

3) 我深入研究了这个问题,发现了一些额外的见解,例如this one 和this additional source。然而,该帖子唯一指出的是,再次使用Set-ExecutionPolicy -ExecutionPolicy RemoteSigned,我在上面的第 1) 点尝试过。

4) 经过一番研究,我发现了this one,但不幸的是我没有使用任何有用的信息。

代码

如果有用的话,下面是我的package.json 中的内容:


  "name": "pi-talk-dashboard",
  "version": "0.0.0",
  "scripts": 
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  ,
  "private": true,
  "dependencies": 
    "@agm/core": "^1.0.0-beta.5",
    "@angular/animations": "^6.0.3",
    "@angular/common": "^6.0.3",
    "@angular/compiler": "^6.0.3",
    "@angular/core": "^6.0.3",
    "@angular/forms": "^6.0.3",
    "@angular/http": "^6.0.3",
    "@angular/platform-browser": "^6.0.3",
    "@angular/platform-browser-dynamic": "^6.0.3",
    "@angular/router": "^6.0.3",
    "chart.js": "^2.7.3",
    "core-js": "^2.5.4",
    "electron": "^7.1.0",
    "express": "^4.17.1",
    "moment": "^2.22.2",
    "ng2-charts": "^1.6.0",
    "rxjs": "^6.0.0",
    "zone.js": "^0.8.26"
  ,
  "devDependencies": 
    "@angular-devkit/build-angular": "^0.803.17",
    "@angular/cli": "~6.0.8",
    "@angular/compiler-cli": "^6.0.3",
    "@angular/language-service": "^6.0.3",
    "@types/jasmine": "~2.8.6",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "~8.9.4",
    "codelyzer": "~4.2.1",
    "jasmine-core": "~2.99.1",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~1.7.1",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.0",
    "karma-jasmine": "~1.1.1",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "^5.4.1",
    "ts-node": "~5.0.1",
    "tslint": "~5.9.1",
    "typescript": "~2.7.2"
  

编辑

以管理员身份运行 -ExecutionPolicy Unrestricted 后,以下脚本在 notepad 中打开,但我不确定它的用途。我附上了打开的文件的打印屏幕和代码:

代码如下:

#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent

$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) 
  # Fix case when both the Windows and Linux builds of Node
  # are installed in the same directory
  $exe=".exe"

$ret=0
if (Test-Path "$basedir/node$exe") 
  & "$basedir/node$exe"  "$basedir/node_modules/@angular/cli/bin/ng" $args
  $ret=$LASTEXITCODE
 else 
  & "node$exe"  "$basedir/node_modules/@angular/cli/bin/ng" $args
  $ret=$LASTEXITCODE

exit $ret

编辑 2

在 PowerShell -ExecutionPolicy Unrestricted 上运行后,没有任何变化。但是出现了一个错误。 Data path ".builders['app-shell']" should have required property 'class'. 请参阅下面的打印屏幕

我对如何运行这个项目以及如何解决这个ng serve 问题没有任何想法,任何其他方向的见解或指导都将有助于解决这个问题。

【问题讨论】:

这应该和我最近发现有问题的npm的一个特性有关:github.com/npm/cli/issues/470>。快速而肮脏的修复方法是在命令之前添加cmd(例如cmd ng serve)或在命令之后添加.cmd(例如ng.cmd serve),甚至只是删除%appdata%\npm中的所有ps1文件来强制powershell 使用 cmd 文件。 【参考方案1】:

我在运行 Angular 12 应用程序时遇到了同样的问题。通过以管理员模式打开 Windows PowerShell 运行以下脚本即可解决此问题。

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

【讨论】:

【参考方案2】:

分 3 步解决

    首先,打开命令提示符并运行此命令。

set-ExecutionPolicy RemoteSigned -Scope CurrentUser

    现在运行第二个命令

获取执行策略

    要查看策略,请运行此命令

Get-ExecutionPolicy -list

然后你会看到

范围执行策略


MachinePolicy 未定义

用户策略未定义

进程未定义

CurrentUser 远程签名

LocalMachine 未定义

CurrentUser 远程签名

LocalMachine 未定义

现在运行命令 ng --version 或 ng serve

【讨论】:

【参考方案3】:

我已经安装了 angular 12,当我使用 ng serve 运行应用程序时,即使出现如下错误

CategoryInfo : SecurityError: (:) [], PSSecurityException FullyQualifiedErrorId : UnauthorizedAccess

以下是我用来解决 UnauthorizedAccess 问题的命令

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser

【讨论】:

【参考方案4】:

在 powershell 中运行以下命令。

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

如果一切正常,您将看到如下屏幕。

【讨论】:

【参考方案5】:

在您的项目文件夹上运行此命令

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

祝你好运

【讨论】:

【参考方案6】:

设置环境变量路径,但不适用于我的情况。然后使用power shell(作为管理员模式)运行以下行

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

现在它正在工作。谢谢

【讨论】:

【参考方案7】:

尝试使用“npx ng”而不是“ng”。如果我尝试使用任何“ng”命令,包括“ng new”,我会得到相同的权限错误。使用这个 npm 包运行器为我解决了这个问题。

【讨论】:

这对我有用。谢谢!!!【参考方案8】:

将 bin 文件夹路径添加到环境变量路径中,将起作用

【讨论】:

【参考方案9】:

以管理员身份打开 Powershell 并执行以下命令:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

【讨论】:

【参考方案10】:

按照错误中提到的方法打开文件,然后删除 ng.ps1 文件,它会正常工作..

在我的例子中,它是 nodemon.ps1。我删除了它并启动了服务器。

【讨论】:

工作就像一个魅力,但你能分享一下这背后的原因吗?【参考方案11】:

我在尝试运行电子打包程序时遇到了这个问题

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser

解决了问题。

【讨论】:

【参考方案12】: 问题

我面临同样的问题,经过一些研究,我发现只需绕过限制并通过服务器启动您的应用程序。

您可以在终端中键入以下内容:

PS C:\Users\\\ClientApp> Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser

PS C:\Users\\\ClientApp> ng 服务

重新运行您的应用程序:

http://localhost:4200/

【讨论】:

【参考方案13】:

您必须将执行策略设置为 无限制 而不是 RemoteSigned。根据Set-ExecutionPolicy:

远程签名。要求从 Internet 下载的所有脚本和配置文件都由受信任的发布者签名。这 Windows 服务器计算机的默认执行策略。

由于 99% 的 PowerShell 脚本未签名,99% 的情况下您将无法在此策略下运行它们。

    以管理员身份打开 PowerShell。 运行:

.

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

【讨论】:

嗨 HAL9256,感谢您阅读我的问题。如第 2 点所述)我无法使用 admin 权限访问 ng 脚本,因为 shell 会立即消失。是否有其他方法可以直接在 Visual Studio 嵌入式 Shell 上以管理员身份访问 PowerShell? (澄清一下)您只需要以管理员身份运行 PowerShell 将执行策略设置为 Unrestricted once 即可全局设置策略. (你这样做了吗?)其他一切都不需要以管理员身份运行 当出现终止错误时(即运行、出错并退出),shell 将迅速消失。 “最好”的方法是打开一个新的 PowerShell 控制台,导航到您的目录,然后从那里运行您的脚本。这样任何错误都会显示在控制台中。设置执行策略后,您遇到了什么错误? (请在原始答案中添加有关任何新错误的部分) 我想我快到了。我以管理员身份运行 shell 并转到文件所在的文件夹:C:\Users\name\AppData\Roaming\npm>ls 我看到了以下文件:ngng.cmdng.ps1node_modules

以上是关于electron - node.js - ng : 无法加载文件路径\ng.ps1,因为在此系统上禁用了运行脚本的主要内容,如果未能解决你的问题,请参考以下文章

使用electron构建跨平台Node.js桌面应用

使用 Electron 编译 node.js 版本时出现问题

使用electron构建跨平台Node.js桌面应用经验分享

更新node.js和Electron后,node-canvas失败

在 Node.js / Electron 应用中播放本地 .avi 视频

electron node.js 在 vscode 设置 调试 Debug