ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

【错误记录】 Powershell 中执行 npm -v 报错 ( npm : 无法加载文件 Xx\npm.ps1,因为在此系统上禁止运行脚本。有关详细信 息,请参阅 https:/go.micr )

【错误记录】 Powershell 中执行 npm -v 报错 ( npm : 无法加载文件 Xx\npm.ps1,因为在此系统上禁止运行脚本。有关详细信 息,请参阅 https:/go.micr ) 文章目录前言一、错误现象1、完整报错信息2、报错关键点解读二、错误原因分析1、执行策略是什么2、为什么 npm 会触发三、解决方案1、推荐方案 : 设置 RemoteSigned ( 一次配置终身有效 )2、备选方案一 : 显式调用 npm.cmd ( 零配置 )3、备选方案二 : 会话级临时放行 ( Bypass )4、三种方案对比四、注意事项与避坑指南总结前言在 Windows 环境按绿色安装方式装好 Node.js 与 npm 之后, 很多人第一次在 PowerShell 里敲npm -v就会撞上一段红色报错 ,提示 无法加载文件 npm.ps1 , 因为在此系统上禁止运行脚本 ;这个报错与 npm 本身没有任何关系 , 是 PowerShell 的执行策略 ( Execution Policy ) 在拦截脚本 ; 本文完整记录该报错的现象 , 成因分析与三种解决方案 , 全程不需要管理员权限 ;一、错误现象1、完整报错信息在 PowerShell 中执行npm -v, 得到如下输出 :PS Y:\001_DevelopTools\000_Codex npm -v npm : 无法加载文件 Y:\001_DevelopTools\000_Codex\node-v24.21.0-win-x64\npm.ps1因为在此系统上禁止运行脚本。有关详细信 息请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 所在位置 行:1 字符: 1 npm -v ~~~ CategoryInfo : SecurityError: (:) []PSSecurityException FullyQualifiedErrorId : UnauthorizedAccess PS Y:\001_DevelopTools\000_Codex npm : 无法加载文件 Xx\npm.ps1因为在此系统上禁止运行脚本。有关详细信 息请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 所在位置 行:1 字符: 12、报错关键点解读逐行拆解 :报错信息其实已经把答案写在了脸上 ;无法加载文件 :PowerShell 找到了npm.ps1但拒绝执行 , 说明 PATH 配置没有问题 , 卡点在脚本权限 ;在此系统上禁止运行脚本 :直接点名执行策略限制 , 并给出了官方文档关键词 about_Execution_Policies ;PSSecurityException :异常类型是安全异常 , 不是文件损坏 , 也不是依赖缺失 ;二、错误原因分析1、执行策略是什么PowerShell 的执行策略是 Windows 内置的脚本安全机制 , 用于决定是否允许运行.ps1脚本文件 ; 它不是杀毒软件 , 也不是文件系统权限问题 , 而是策略层面的白名单开关 ; 策略按作用域分层 , 常用的几档如下 :作用域含义是否需要管理员权限MachinePolicy组策略统一下发 , 企业环境常见不可修改LocalMachine整台机器永久生效需要CurrentUser当前账号永久生效不需要Process仅当前终端会话有效 , 关闭即失效不需要Windows 客户端系统的默认策略为Restricted, 即禁止运行任何.ps1脚本 , 这就是报错的直接来源 ;2、为什么 npm 会触发npm 在目录根下会同时生成两份启动 shim :npm.cmd与npm.ps1, 两种终端各取所需 :CMD 终端 :走npm.cmd批处理文件 , 批处理不受执行策略管辖 , 所以 CMD 里执行npm -v完全正常 ;PowerShell 终端 :优先选择npm.ps1脚本 , 而默认策略禁止运行一切.ps1文件 , 于是直接被拦截 ;后续 Codex CLI 的codex命令同理 , 它依赖codex.ps1shim , 不解决这个问题同样会被拦截 , 因此该步骤建议在验证 npm 之前一次性处理掉 ;三、解决方案1、推荐方案 : 设置 RemoteSigned ( 一次配置终身有效 )操作步骤 :在 PowerShell 中执行以下命令 :# 查看当前用户作用域的策略 ( 可选 , 通常输出 Restricted )Get-ExecutionPolicy-Scope CurrentUser# 允许本地脚本运行 , 远程下载脚本必须带数字签名 ( 安全与便利的平衡点 )Set-ExecutionPolicy-ExecutionPolicy RemoteSigned-Scope CurrentUser# 提示确认时输入 Y 后回车验证 :重开终端后执行npm -v, 输出版本号即解决 ;方案说明 :安全性 :RemoteSigned是微软官方推荐值 , 本地脚本 ( 如 npm.ps1 , codex.ps1 ) 可以直接运行 , 从网络下载的脚本必须有签名才能执行 , 并不会门户大开 ;影响范围 :-Scope CurrentUser只作用于当前账号 , 不需要管理员权限 , 也不会污染系统全局配置 ;持久性 :一次配置写入用户策略 , 重启终端与系统均不失效 ;2、备选方案一 : 显式调用 npm.cmd ( 零配置 )不想修改任何策略时 , 每次显式调用 cmd 版 shim 即可 :# cmd 批处理不受执行策略管辖 , 可直接运行npm.cmd-v适用场景 :公司安全红线严禁修改执行策略的环境 ; 代价是每次都要多敲.cmd四个字符 , 仅适合偶尔手动执行的场景 , 无法被依赖 ps1 shim 的工具链自动复用 ;3、备选方案二 : 会话级临时放行 ( Bypass )只在当前终端会话内临时放行 , 关闭窗口立即恢复原策略 :# 仅当前会话生效 , 关闭终端即失效 , 不写入任何持久配置Set-ExecutionPolicy-ExecutionPolicy Bypass-ScopeProcessnpm-v适用场景 :临时救急或使用公共电脑 , 不希望在系统里留下任何策略变更痕迹 ;4、三种方案对比方案关键命令生效范围持久性推荐度RemoteSignedSet-ExecutionPolicy -Scope CurrentUser当前用户永久首选调用 npm.cmdnpm.cmd -v单次命令无不改策略时的兜底Process BypassSet-ExecutionPolicy -Scope Process当前会话关终端失效临时救急四、注意事项与避坑指南现象原因处理方式设置策略后仍然报错修改后没有重开终端关闭 PowerShell 窗口重新打开再验证提示拒绝访问使用了 LocalMachine 作用域却没有管理员权限改用 -Scope CurrentUser策略无法修改MachinePolicy 组策略优先级更高联系企业管理员处理 , 个人机器不会遇到想撤销修改恢复默认严格策略Set-ExecutionPolicy -ExecutionPolicy Restricted -Scope CurrentUserCMD 里正常 PowerShell 里报错两种终端走了不同的 shim属正常现象 , 按本文方案设置策略即可总结本文核心结论 :报错本质是 PowerShell 执行策略拦截了npm.ps1shim , 与 npm 安装本身无关 ;首选方案是Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser, 一次配置 , npm 与 codex 的 ps1 shim 全部解锁 ;严禁改策略的环境用npm.cmd显式调用兜底 , 临时场景用-Scope Process会话级放行 ;核心机制一句话 : CMD 走 cmd shim 不受执行策略管辖 , PowerShell 走 ps1 shim 受执行策略管辖 ;解决该问题后 , Codex CLI 安装流程中的npm -v与后续codex --version验证即可顺利通过 ;
返回列表