1.先说解决方案:
1.以
管理员身份
运行PowerShell或VS Code2.执行
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
。