PowerShell和VS Code在执行cnpm时报错

  • Post author:
  • Post category:其他


1.先说解决方案:

1.以

管理员身份

运行PowerShell或VS Code

2.执行

set-ExecutionPolicy RemoteSigned

命令

2.报错原因

PowerShell 执行策略是一项安全功能,用于控制 PowerShell 加载配置文件和运行脚本的条件。 此功能有助于防止恶意脚本的执行。

这些策略的强制仅在 Windows 平台上发生。 PowerShell 执行策略如下所示:

AllSigned

  • 脚本可以运行。
  • 要求所有脚本和配置文件都由受信任的发布者签名,包括在本地计算机上编写的脚本。
  • 在从尚未归类为受信任或不受信任的发布者运行脚本之前,将提示您。
  • 运行已签名但恶意脚本的风险。

Bypass

  • 不阻止任何操作,并且没有任何警告或提示。
  • 此执行策略适用于以下配置:将 PowerShell 脚本内置于更大的应用程序或配置,其中 PowerShell 是具有其自己的安全模型的程序的基础。

Default

  • 设置默认的执行策略。

  • Restricted

    对于 Windows 客户端。
  • 用于 Windows 服务器的

    RemoteSigned

RemoteSigned

  • Windows server 计算机的默认执行策略。
  • 脚本可以运行。
  • 要求来自受信任的发布者的脚本和配置文件的数字签名,这些脚本和配置文件是从 internet 下载的,其中包括电子邮件和即时消息程序。
  • 不需要在本地计算机上编写的脚本上的数字签名,也不需要从 internet 下载。
  • 如果未对脚本进行阻止,则运行从 internet 下载的脚本,而不是未签名的脚本,例如通过使用

    Unblock-File

    cmdlet。
  • 从 internet 以外的源运行未签名脚本的风险,以及可能是恶意的签名脚本。

Restricted

  • Windows 客户端计算机的默认执行策略。
  • 允许单独的命令,但不允许脚本。
  • 阻止运行所有脚本文件,包括格式设置和配置文件 (

    .ps1xml

    ) 、模块脚本文件 (

    .psm1

    ) 和 PowerShell 配置文件 (

    .ps1

    ) 。

Undefined

  • 当前作用域中没有设置执行策略。
  • 如果所有作用域中的执行策略都是

    Undefined

    ,则有效的执行策略

    Restricted

    适用于 Windows 服务器 Windows 客户端和

    RemoteSigned

Unrestricted

  • 非 Windows 计算机的默认执行策略无法更改。
  • 未签名的脚本可以运行。 存在运行恶意脚本的风险。
  • 在运行不在本地 intranet 区域中的脚本和配置文件之前警告用户。

执行:

get-ExecutionPolicy

可查询当前 PowerShell 会话的有效执行策略,显示Restricted,表示状态是禁止的 ,所以执行cnpm会报错。

可用 Set-ExecutionPolicy <PolicyName> 命令修改值。

例如 set-ExecutionPolicy RemoteSigned

3.拓展

可以设置仅在特定作用域内有效的执行策略。

有效值为

Scope


MachinePolicy



UserPolicy



Process



CurrentUser



LocalMachine

。 设置执行策略时,

LocalMachine

为默认值。

这些

Scope

值按优先级顺序列出。 优先级相同的策略在当前会话中有效,即使在优先级较低的情况下设置了限制性更强的策略也是如此。

MachinePolicy

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

UserPolicy

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

Process


Process

作用域只影响当前 PowerShell 会话。 执行策略保存在环境变量

$env:PSExecutionPolicyPreference

中,而不是保存在注册表中。 关闭 PowerShell 会话后,会删除变量和值。

CurrentUser

执行策略仅影响当前用户。 它存储在

HKEY_CURRENT_USER

注册表子项中。

LocalMachine

执行策略会影响当前计算机上的所有用户。 它存储在

HKEY_LOCAL_MACHINE

注册表子项中。

可通过

Get-ExecutionPolicy -List

命令获取影响当前会话的所有执行策略,并按优先顺序显示

PS E:\fsk\fsk-vue-customer\fsk-vue-customer> Get-ExecutionPolicy
RemoteSigned
PS E:\fsk\fsk-vue-customer\fsk-vue-customer> Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    RemoteSigned

可通过

Set-ExecutionPolicy -ExecutionPolicy <PolicyName> -Scope <scope>

命令设置特定范围中的执行策略。

例如:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

需要注意的是,用于更改执行策略的命令可以成功,但仍不会更改有效的执行策略。

例如,为本地计算机设置执行策略的命令可能会成功,但会被当前用户的执行策略覆盖。

若要删除特定作用域的执行策略,值设置为

Undefined



版权声明:本文为jww_1993原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。