Windows PowerShell执行策略详解:从npm报错到完美解决


🌸你好呀!我是断弦承露
🌟感谢陪伴~ 小白博主在线求友
🌿 跟着小白学/Java/软件设计/鸿蒙开发/芯片开发
📖专栏汇总:
《软件设计师》专栏 | 《Java》专栏 | 《 RISC-V 处理器实战》专栏 | 《Flutter鸿蒙实战》专栏 | 《React Native开发》专栏 ------|CSDN|------

文章目录

Windows PowerShell执行策略详解:从npm报错到完美解决(2026新手保姆级教程)


📝 文章摘要

很多刚学Node.js的新手都会遇到这个经典报错:npm : 无法加载文件 npm.ps1,因为在此系统上禁止运行脚本。这篇文章就从这个报错切入,结合微软官方2025年9月更新的权威文档,给你讲清楚Windows PowerShell的**执行策略(Execution Policy)**到底是什么、默认规则是怎么限制你的、怎么安全修改策略解决问题,最后还给你整理了新手必问的FAQ和完整的操作流程图。

全文面向纯小白,看完你不仅能解决npm报错,还能彻底搞懂PowerShell的安全机制,以后再也不会踩同样的坑!


🧠 文章思维导图

PowerShell执行策略详解
问题引入:npm经典报错
执行策略基础:是什么为什么
默认策略详解:Restricted受限模式
全策略对比:安全等级&适用场景
执行策略作用域:Scope详解
保姆级解决步骤:4步搞定npm报错
新手必问FAQ
总结&安全提醒


🔄 npm报错解决完整流程图





遇到npm.ps1禁止运行报错
以管理员身份打开PowerShell
是否成功打开管理员终端?
查看当前策略 Get-ExecutionPolicy -List
执行 Set-ExecutionPolicy RemoteSigned
重新右键选择以管理员身份运行
输入Y确认修改
关闭所有终端窗口
重新打开普通PowerShell
验证 npm --version
是否正常显示版本号?
成功!继续安装pnpm
检查是否重启终端/是否正确修改策略


一、问题引入:你是不是也遇到了这个npm报错?

刚装完Node.js,兴冲冲打开PowerShell想验证npm,结果直接弹出一大段红色报错:

复制代码
npm : 无法加载文件 D:\Program Files\npm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https://go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
所在位置 行:1 字符: 1
+ npm --version
+ ~~~
    + CategoryInfo          : SecurityError: (:) [],PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

别慌!这不是你Node.js没装好,也不是npm坏了,是Windows PowerShell的默认安全策略在"保护"你呢。接下来我们就结合微软官方文档,把这个机制讲透,然后用4步彻底解决问题。


二、执行策略基础:它到底是什么?为什么要有?

2.1 什么是执行策略?

Windows PowerShell的执行策略(Execution Policy) ,是PowerShell自带的一套"脚本安全门禁",核心作用就是控制PowerShell加载配置文件和运行脚本的条件,帮助防止恶意脚本的执行

🔗 权威参考:微软官方2025年9月更新的完整文档:about_Execution_Policies

2.2 为什么要有这个策略?

PowerShell是Windows系统里非常强大的命令行工具,它能直接操作系统文件、修改注册表、安装软件------如果没有任何限制,恶意脚本就能在你电脑里为所欲为。

但这里有个重要的点需要明确:执行策略不是安全系统,它不能限制用户的行为 。比如,用户如果不能运行脚本,可以很容易地通过在命令行手动输入脚本内容来绕过策略。执行策略的作用是帮助用户设置基本规则,防止他们无意中违反这些规则


三、默认策略详解:你的电脑为什么会报错?

3.1 不同Windows系统的默认策略

根据微软官方文档,不同系统的默认执行策略不一样:

系统类型 默认执行策略 策略特点
Windows 10/11 个人客户端 Restricted(受限模式) 最严格,个人电脑出厂默认
Windows Server 服务器系统 RemoteSigned(远程签名模式) 较宽松,平衡安全与易用
非Windows系统(macOS/Linux) Unrestricted(无限制) 无法更改,行为实际等同于Bypass

3.2 默认Restricted(受限)模式,到底限制了什么?

这个模式的规则非常简单粗暴,但也正是它导致了你的npm报错:

核心规则:允许单个命令运行,但不允许脚本运行。

它会阻止运行所有脚本文件,包括:

  • 格式化和配置文件(.ps1xml
  • 模块脚本文件(.psm1
  • PowerShell配置文件(.ps1

补充2个关键细节,帮你彻底理解报错原因:

  1. 它不限制你手动敲的单条命令 :比如你输入node --versiondir查看文件夹这种手动敲的命令,完全不受影响,只有后缀为.ps1的"脚本文件"会被拦截。
  2. npm的启动入口就是一个.ps1脚本 :你装完Node.js后,npm在Windows里的启动文件就是npm.ps1------默认的Restricted模式不让系统运行这个脚本,哪怕npm本身已经被正确安装了,也会报"禁止运行脚本"的错误。

四、PowerShell全执行策略对比:安全等级&适用场景

为了让你明白我们接下来要改的策略为什么安全,这里把所有执行策略列成表格,安全等级从高到低排序:

策略名称 核心规则 安全等级 推荐场景
Restricted(个人系统默认) 允许单个命令,不允许任何脚本 🔴 最高 Windows个人系统出厂默认,完全杜绝脚本风险
AllSigned 脚本可以运行,但要求所有脚本和配置文件都必须由受信任的发布者签名,包括你在本地计算机上编写的脚本。在运行尚未归类为受信任或不受信任的发布者的脚本之前,会提示你。 🟠 高 高安全要求的企业办公环境
RemoteSigned(新手强烈推荐) 脚本可以运行。要求从互联网(包括电子邮件和即时消息程序)下载的脚本和配置文件必须具有受信任发布者的数字签名。不需要对在本地计算机上编写且不是从互联网下载的脚本进行数字签名。如果脚本已被解除阻止(例如使用Unblock-File cmdlet),则可以运行从互联网下载且未签名的脚本。 🟢 中高(安全&易用完美平衡) 个人开发、日常使用,Windows服务器默认策略,微软官方推荐的个人开发配置
Unrestricted 未签名的脚本可以运行。存在运行恶意脚本的风险。在运行来自本地Intranet区域的脚本和配置文件之前警告用户。 🟡 低 非Windows系统默认,不推荐Windows新手使用
Bypass 没有任何内容被阻止,也没有警告或提示。此执行策略设计用于PowerShell脚本内置于较大应用程序的配置,或PowerShell是具有自己的安全模型的程序的基础的配置。 🟤 极低 仅特殊测试场景使用,日常使用极度不安全
Undefined 当前作用域中未设置执行策略。如果所有作用域中的执行策略都为Undefined,则Windows客户端的有效执行策略为Restricted,Windows Server的有效执行策略为RemoteSigned ⚪ 无 无特殊日常用途

五、执行策略作用域(Scope):新手进阶必知

根据微软官方文档,执行策略可以设置在不同的作用域中,只在特定范围内有效。这是很多新手容易忽略的点,了解它能帮你更好地排查问题。

5.1 作用域优先级

作用域的有效值按优先级顺序排列如下(优先级从高到低):

  1. MachinePolicy:由组策略为计算机的所有用户设置。
  2. UserPolicy:由组策略为当前用户设置。
  3. Process :仅影响当前PowerShell会话。执行策略保存在环境变量$Env:PSExecutionPolicyPreference中,而不是配置文件中。关闭PowerShell会话时,变量和值将被删除。
  4. CurrentUser:执行策略仅影响当前用户。它存储在CurrentUser配置文件中。
  5. LocalMachine:执行策略影响当前计算机上的所有用户。它存储在AllUsers配置文件中。

在确定会话的有效执行策略时,PowerShell会按上述优先级顺序评估执行策略。优先级较高的策略生效,即使在较低优先级设置了更严格的策略。

5.2 如何查看当前的执行策略?

这是新手排查问题的重要步骤,建议在修改策略前后都执行一下:

  1. 查看当前会话的有效执行策略

    powershell 复制代码
    Get-ExecutionPolicy
  2. 查看影响当前会话的所有执行策略并按优先级顺序显示

    powershell 复制代码
    Get-ExecutionPolicy -List

    示例输出:

    复制代码
            Scope ExecutionPolicy
            ----- ---------------
    MachinePolicy       Undefined
       UserPolicy       Undefined
          Process       Undefined
      CurrentUser    RemoteSigned
     LocalMachine       AllSigned

    在这种情况下,有效执行策略是RemoteSigned,因为CurrentUser的执行策略优先于LocalMachine设置的执行策略。


六、保姆级解决步骤:4步彻底搞定npm报错(录屏式手把手)

我们要改的策略是RemoteSigned------这是微软官方推荐的个人开发配置,既解决了npm的问题,又保留了对网络恶意脚本的防护,完全不用担心安全问题。

第一步:必须以【管理员身份】打开PowerShell(核心前提!)

普通权限改不了系统策略(LocalMachine或CurrentUser作用域),这一步很多新手会忘,一定要仔细看:

  1. 点击Windows左下角的开始菜单(或者按键盘上的Win键);

  2. 在搜索框里直接输入 PowerShell

  3. 右键点击搜索结果里的「Windows PowerShell」(注意是右键,不是左键双击!);

  4. 在弹出的菜单里选择 【以管理员身份运行】

  5. 这时候会弹出一个蓝色的「用户账户控制」提示框,问你"是否允许此应用对你的设备进行更改?",直接点 【是】

  6. 现在你打开的就是管理员PowerShell了,窗口标题里会有「管理员」三个字,确认一下。

第二步:查看当前策略(可选但推荐)

在修改之前,建议先看一下当前的执行策略,做到心中有数:

powershell 复制代码
Get-ExecutionPolicy -List

记下当前的设置,方便以后恢复。

第三步:执行修改安全策略的命令

在打开的管理员PowerShell窗口里,完整复制下面这行命令,不要改任何字符,直接粘贴进去,然后按键盘上的回车键

powershell 复制代码
Set-ExecutionPolicy RemoteSigned

默认情况下,这会修改LocalMachine作用域(影响所有用户)。如果你只想修改当前用户的策略,可以加上-Scope CurrentUser参数:

powershell 复制代码
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

执行后会弹出确认提示:

复制代码
执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170 中所述。是否要更改执行策略?
[Y] 是(Y)  [N] 否(N)  [S] 暂停(S)  [?] 帮助 (默认值为"N"):

这时候输入大写的 Y,然后再按回车键确认。

✅ 微软官方说明:更改会立即生效,不需要重启PowerShell,但我们还是建议你重启一下终端,确保万无一失。

第四步:重启所有终端窗口(非常重要!)

很多新手改完策略直接验证,结果还是报错------因为旧的终端窗口可能还在沿用之前的环境

  1. 把现在的管理员PowerShell窗口关掉;
  2. 把之前打开的普通PowerShell、CMD窗口也全部关掉;
  3. 确保没有任何终端窗口在运行。

第五步:验证是否成功,然后安装pnpm

  1. 重新打开一个普通的PowerShell(不用管理员了);

  2. 先验证一下执行策略是否修改成功:

    powershell 复制代码
    Get-ExecutionPolicy

    应该输出RemoteSigned

  3. 再验证npm:

    bash 复制代码
    npm --version

    ✅ 如果正常显示版本号(比如 10.9.0,版本号随Node.js版本不同会变,只要有数字就行),就代表成功了!

  4. 顺便验证一下Node.js:

    bash 复制代码
    node --version

    ✅ 显示版本号(比如 v24.14.0v18.20.4)就没问题。

  5. 现在你可以正常安装pnpm了:

    bash 复制代码
    npm install -g pnpm

安装完成后验证:
bash pnpm --version

✅ 显示版本号就全部搞定,可以去跑你的项目了!


七、新手必问FAQ(你想问的这里都有)

Q1:改了RemoteSigned策略,我的电脑会不会中毒?会不会不安全?

绝对不会! 这是微软官方推荐的个人开发配置,也是Windows Server服务器系统的默认策略。它的规则是:

  • 你自己电脑上生成的脚本(比如npm、pnpm的启动脚本)可以正常运行;
  • 从网上下载的陌生脚本,必须有官方数字签名才能运行------既解决了你的问题,又完全保留了对恶意脚本的防护,放心用!

Q2:我能不能用CMD代替PowerShell?是不是就不用改策略了?

可以用CMD!CMD没有PowerShell的执行策略限制,你直接打开CMD输入npm --version,大概率能直接显示版本号。

但还是建议你改一下PowerShell的策略------现在很多开发工具、教程默认都是用PowerShell的,改完以后用起来更方便,不用每次都特意开CMD。

Q3:我按照步骤改了,也重启终端了,为什么还是报错?

大概率是这4个原因,按顺序排查:

  1. 是不是没真的重启终端? 一定要把所有终端窗口(包括管理员的、普通的)全部关掉,重新打开新的,旧窗口不会生效。
  2. 是不是没以管理员身份开PowerShell? 普通权限执行Set-ExecutionPolicy会报错,改不了策略,回到第一步重新确认。
  3. 是不是输错了命令? 检查一下命令是不是完整的Set-ExecutionPolicy RemoteSigned,有没有少字符、多空格。
  4. 是不是有更高优先级的策略覆盖了? 比如组策略(MachinePolicy/UserPolicy)。执行Get-ExecutionPolicy -List查看,如果MachinePolicy或UserPolicy有设置,那它们会优先生效,这种情况需要联系系统管理员修改组策略。

Q4:从网上下载的脚本被RemoteSigned策略阻止了,怎么办?

如果你确定这个脚本是安全的,可以使用Unblock-File cmdlet来解除阻止:

powershell 复制代码
Unblock-File -Path C:\路径\到\你的\脚本.ps1

解除阻止后,就可以正常运行了。

Q5:我以后想恢复成系统默认的Restricted策略,怎么操作?

非常简单,随时可以恢复:

  1. 以管理员身份打开PowerShell;

  2. 执行命令(恢复LocalMachine作用域):

    powershell 复制代码
    Set-ExecutionPolicy Restricted

    或者只恢复CurrentUser作用域:

    powershell 复制代码
    Set-ExecutionPolicy Restricted -Scope CurrentUser
  3. 输入Y确认,重启终端就恢复成出厂默认了。

  4. 如果你想完全移除某个作用域的策略,设置为Undefined即可:

    powershell 复制代码
    Set-ExecutionPolicy Undefined -Scope LocalMachine

Q6:执行策略和杀毒软件、防火墙是一回事吗?

不是一回事!执行策略只是PowerShell自身的内部安全机制,只限制PowerShell脚本的运行,不会影响其他软件、不会替代杀毒软件。你的电脑还是要装杀毒软件、开防火墙,它们是互补的关系,不是替代的关系。

Q7:我只想为这一次会话临时改一下策略,不想永久修改,怎么办?

可以!你可以在启动PowerShell时指定执行策略,这只会影响当前会话和子会话,不会保存到配置文件中:

  1. 先打开CMD;

  2. 执行命令启动PowerShell并指定策略:

    powershell 复制代码
    pwsh.exe -ExecutionPolicy RemoteSigned

    (如果你用的是Windows PowerShell 5.1,命令是powershell.exe -ExecutionPolicy RemoteSigned

  3. 在这个新打开的PowerShell窗口里,策略就是RemoteSigned,关闭窗口后就会恢复原来的设置。


八、总结&安全提醒

  1. npm.ps1报错不是安装失败 ,是PowerShell默认Restricted策略的限制;
  2. 推荐修改为RemoteSigned策略,这是微软官方推荐的安全&易用平衡的选择;
  3. 修改策略必须以管理员身份打开PowerShell ,改完可以用Get-ExecutionPolicy验证;
  4. 了解执行策略的作用域,能帮你更好地排查问题;
  5. 不要修改为UnrestrictedBypass,这会完全关闭PowerShell的安全防护,存在风险;
  6. 策略可以随时恢复默认,不用担心改不回来。

希望这篇结合了微软官方2025年最新文档的文章能帮你彻底解决PowerShell执行策略的问题!如果还有疑问,欢迎在评论区留言,我会尽量回复~

如果本文对你有帮助,欢迎点赞👍、收藏⭐、评论💬!

个人领域:C++/java/Al/软件开发/芯片开发
个人主页:「一名热衷协作的开发者,在构建中学习,期待与你交流技术、共同成长。」

座右铭:「与其完美地观望,不如踉跄地启程」

相关推荐
Z兽兽8 小时前
React@18+Vite项目配置env文件
前端·react.js·前端框架
SuniaWang8 小时前
《Spring AI + 大模型全栈实战》学习手册系列 · 专题六:《Vue3 前端开发实战:打造企业级 RAG 问答界面》
java·前端·人工智能·spring boot·后端·spring·架构
A_nanda9 小时前
根据AI提示排查vue前端项目
前端·javascript·vue.js
happymaker06269 小时前
web前端学习日记——DAY05(定位、浮动、视频音频播放)
前端·学习·音视频
~无忧花开~9 小时前
React状态管理完全指南
开发语言·前端·javascript·react.js·前端框架
LegendNoTitle10 小时前
计算机三级等级考试 网络技术 选择题考点详细梳理
服务器·前端·经验分享·笔记·php
@大迁世界10 小时前
1.什么是 ReactJS?
前端·javascript·react.js·前端框架·ecmascript
BJ-Giser11 小时前
Cesium 基于EZ-Tree的植被效果
前端·可视化·cesium
vistaup11 小时前
windows git 更新当前目录下所有的文件(非递归)
windows·git