返回 Bug 清单
BUG-0220project-12高已修复powershell

PowerShell $PROFILE 膨胀至 29MB:Regex.Replace 替换串 $ 未转义 + 替换范围不含 hook 注释,每次安装复制整份 profile

发现:2026-10-01验证:2026-10-09置信度:70%

症状

每次打开 PowerShell 报海量语法解析错误;$PROFILE 文件 29MB;marker 成对出现上万次

根因

两个缺陷叠加:① .NET Regex.Replace 的替换字符串里 $ 是特殊字符($` 代表匹配前的全部文本),hookBody 含 $ 未转义,替换结果被展开成 profile 前文;② 替换 pattern 只匹配 marker 之间的代码体,不含注释行,导致旧 hook 未被完整替换。每次运行 install.ps1 都把整份 profile(含原有 4 行)复制一遍,16,275 次累积后达 29,664,059 字符 / 703,086 行 / 21,014 个语法错误,每次开终端报大量解析错误。

修复方案

替换串先做 $ 转义($hookBody.Replace('$','$$'))或改用 MatchEvaluator 委托;替换 pattern 必须覆盖含注释在内的完整 hook 块;安装脚本加幂等断言(安装后 marker 计数必须为 1)。

错误签名

function global:prompt 16275 copies $PROFILE 29MB 703086 lines syntax errors

技术信息

来源项目

project-12

涉及文件

scripts/hooks/install.ps1, docs/INCIDENT-20261001-PowerShell-profile膨胀.md

标签

powershell, regex-replace, 幂等安装, profile, 事故复盘...