Firebase 脚本未签名 - Powershell

S.R*_*jit 8 powershell node.js firebase google-cloud-functions

我正在使用 Firebase 设置一个新项目,运行命令后firebase init functions,出现以下错误。

firebase : File C:\Users\fudge\AppData\Roaming\npm\firebase.ps1 cannot be loaded. The file C:\Users\fudge\AppData\Roaming\npm\firebase.ps1 is not digitally signed. 
You cannot run this script on the current system. For more information about running scripts and setting execution policy, see about_Execution_Policies at 
https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ firebase init functions
+ ~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess
Run Code Online (Sandbox Code Playgroud)

我知道我可以跑

Set-ExecutionPolicy -ExecutionPolicy Unrestricted
Run Code Online (Sandbox Code Playgroud)

允许它运行,但这似乎很危险,因为我想如果我的电脑有恶意脚本,我也会允许恶意脚本运行。是否有任何原因导致 Firebase 包未进行数字签名并且是否可以在firebase不更改执行策略的情况下使用?

在 init 命令之前我只使用了这三个命令,使用的是 Node v12.14.0:

npm init
npm install firebase-functions@latest firebase-admin@latest --save
npm install -g firebase-tools
Run Code Online (Sandbox Code Playgroud)

Che*_*irl 7

我在 VSCode 终端中遇到了同样的错误,因此我在命令提示符中运行了该命令,它对我有用。


pos*_*ote 5

您将遇到许多未签名的脚本。只有作者才能回答:

Firebase 包未进行数字签名是否有任何原因

...这对于您遇到的任何未签名的脚本都是如此。话虽如此,没有什么可以阻止您签署来自其他任何人的任何脚本(如果不是的话)。然而,这是你的选择。

根据您运行的 PowerShell 版本,在默认安装、操作系统级别配置中,ExecutionPolicy 设置为受设计限制。

这根本不会阻止您运行脚本,因为您可以将脚本加载到 ISE 并按 F8,它将运行。firebase 脚本可能会在命令提示符下运行。

您可以将整个脚本复制并粘贴到控制台主机中,一旦您按 Enter 键,它也会运行。

当然,这不是运行脚本的自动化方式。

当前 ExecutionPolicy 设置默认设置为 RemoteSigned,因此本地脚本可以运行,所有其他脚本必须经过签名才能运行。

有多种方法可以允许 PowerShell 脚本运行,而无需更改主机操作系统 ExecutionPolicy 设置。在大多数企业中,此设置是通过 GPO 进行和实施的。如果这是你的情况,无论现在还是将来,那么你无论如何都无法改变它。

PowerShell ExecutionPolicy 有一个范围,您可以使用其中任何一个在用户上下文甚至进程上下文中运行脚本,并且给定的 ExecutionPolicy 仅在运行期间有效。

根据帮助文件:

关于执行策略

执行策略范围 您可以设置仅在特定范围内有效的执行策略。

范围的有效值为:

MachinePolicy、UserPolicy、Process、CurrentUser 和 LocalMachine。

设置执行策略时,LocalMachine 是默认值。

范围值按优先顺序列出。优先的策略在当前会话中有效,即使在较低优先级设置了更严格的策略。

有关更多信息,请参阅设置执行策略。

MachinePolicy 由组策略为计算机的所有用户设置。

UserPolicy 由计算机当前用户的组策略设置。

过程

进程范围仅影响当前的 PowerShell 会话。

执行策略保存在环境变量 $env:PSExecutionPolicyPreference 中,而不是注册表中。当 PowerShell 会话关闭时,变量和值将被删除。

当前用户

执行策略仅影响当前用户。它存储在 HKEY_CURRENT_USER 注册表子项中。

LocalMachine 执行策略影响当前计算机上的所有用户。它存储在 HKEY_LOCAL_MACHINE 注册表子项中。

有多种方法可以绕过限制性执行策略,如下所示:

绕过 PowerShell 执行策略的 15 种方法

您将默认 OS ExecutionPolicy 设置为 Unrestricted 的担忧是谨慎的。不,根据上面的说法,没有理由这样设置。设置每个会话或用户的 ExecutionPolicy。

  • 如果要将用户执行策略设置为无限制,则需要相关命令(“15 种方式”列表的底部):Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted (2认同)