PowerShell 7.2 LTS 全版本演进解析:从 preview.1 到 7.2.23 的完整版本档案
本文基于仓库中的 CHANGELOG/7.2.md 完整梳理 PowerShell 7.2 系列的全部 24 个版本节点:从 2020 年 11 月的 preview.1,到 2021 年 11 月的 GA,再到 2024 年 8 月的最后一个长期支持补丁 7.2.23。你将掌握 7.2 系列引入了哪些破坏性变更与核心新特性(ANSI 渲染、原生命令参数传递、跨平台 DSC 等)、LTS 补丁版本的服务节奏与 .NET 6 基线演进,并能结合当前仓库源码验证这些特性的落点。
一、文档定位:7.2 是一个完整的 LTS 生命周期
CHANGELOG/7.2.md 覆盖 7.2 从孵化到停止服务的全过程,时间跨度约 3 年 9 个月(2020-11-17 至 2024-08-20)。该文件在版本索引 CHANGELOG/README.md 中作为 “7.2 changelog” 独立列出,与 7.3~7.6、preview 等 changelog 并列。
整个生命周期可分三个阶段:
| 阶段 | 版本范围 | 时间 | 特征 |
|---|---|---|---|
| 预览版 | 7.2.0-preview.1 ~ preview.10、rc.1 | 2020-11 ~ 2021-10 | 密集的功能引入:破坏性变更、实验特性、性能优化、代码清理 |
| GA | 7.2.0 | 2021-11-08 | 基于 .NET 6 GA 构建 |
| LTS 服务版 | 7.2.1 ~ 7.2.23 | 2021-12 ~ 2024-08 | 以安全修复、.NET 6 服务版升级、打包与签名流程改进为主 |
其中 7.2.10 的一条记录(#19069)明确把 “7.2.x releases” 标记为 latest LTS but not latest stable,从 changelog 本身可以确认 7.2 系列承担的是长期支持(LTS)角色。
二、版本时间线总览
| 版本 | 日期 | 核心要点 |
|---|---|---|
| 7.2.0-preview.1 | 2020-11-17 | .NET 5 RTM 基线,Start-Transcript 默认回退编码改为 UTF8 无 BOM |
| 7.2.0-preview.2 | 2020-12-15 | 实验特性 PSAnsiRendering($PSStyle)首次引入 |
| 7.2.0-preview.3 | 2021-02-11 | Get-Date -UFormat %u 修复为符合 ISO 8601;跨平台 DSC 能力 |
| 7.2.0-preview.4 | 2021-03-16 | 启用 Apple M1 运行时构建;Get-Date -UFormat %G/%g 修复 |
| 7.2.0-preview.5 | 2021-04-14 | Linux deb/RPM 包改为 universal;PSNativeCommandArgumentPassing 实验特性 |
| 7.2.0-preview.6 | 2021-05-27 | 跨平台 DSC 代码移入引擎子系统;性能优化集中落地 |
| 7.2.0-preview.7 | 2021-06-17 | 移除 PSDesiredStateConfiguration v2.0.5 模块(改由 PowerShell Gallery 发布) |
| 7.2.0-preview.8 | 2021-07-22 | $PSNativeCommandArgumentPassing 增加 Windows 模式;$PSStyle 增强 |
| 7.2.0-preview.9 | 2021-08-23 | $PSStyle.OutputRendering 默认值改为 Host;五个实验特性转正 |
| 7.2.0-rc.1 | 2021-10-21 | 包内加入 Software Bill of Materials;代码签名验证修复 |
| 7.2.0 | 2021-11-08 | GA,基于 .NET 6.0.100 RTM 构建 |
| 7.2.1 | 2021-12-14 | 框架依赖包恢复 pwsh.exe 以支持 Start-Job;$PSStyle.OutputRendering 默认值改为 Ansi |
| 7.2.2 ~ 7.2.3 | 2022-03-16 / 2022-04-26 | SBOM 清单、全局工具校验和、模块搜索路径修复 |
| 7.2.4 | 2022-05-17 | .NET SDK 6.0.203;RPM 包增加 sha256 摘要 |
| 7.2.5 | 2022-06-21 | 修复 osx-arm64 原生库加载 |
| 7.2.6 | 2022-08-11 | 修复 ForEach-Object -Parallel 传递脚本块变量问题 |
| 7.2.7 | 2022-10-20 | Invoke-WebRequest 移除小文件下载 1 秒最小延迟 |
| 7.2.8 | 2022-12-13 | .NET SDK 6.0.403;System.Data.SqlClient 4.8.5 |
| 7.2.9 | 2023-01-24 | 修复 JEA 会话函数泄漏 |
| 7.2.10 | 2023-02-23 | 7.2.x 标记为 latest LTS;azCopy 10 |
| 7.2.11 | 2023-04-12 | 包构建重构以简化签名与打包阶段 |
| 7.2.12 | 2023-06-27 | 发布工具增加 backport 函数;包许可证校验 |
| 7.2.13 | 2023-07-13 | 子系统测试超时调整 |
| 7.2.14 | 2023-09-18 | 发布 rhel9 RPM 包;MSI 注册表写入 ProductCode |
| 7.2.15 | 2023-10-10 | 安全修复:受限远程会话中阻止从网络位置获取帮助 |
| 7.2.16 | 2023-10-26 | 新增 mariner2 arm64 运行时与打包支持 |
| 7.2.17 | 2023-11-16 | ErrorRecord 中脱敏 Auth 头内容 |
| 7.2.18 | 2024-01-11 | runtimeconfig.json 设置 rollForwardOnNoCandidateFx |
| 7.2.19 | 2024-04-11 | OneBranch 协调构建流水线 |
| 7.2.20 | 2024-06-06 | 限制发布(仅 .NET SDK 容器镜像);全局工具生成方式变更 |
| 7.2.21 | 2024-06-18 | 7.2.20 面向广泛渠道发布 |
| 7.2.22 | 2024-07-18 | .NET 6.0.424;修复模块清单文件路径解析 |
| 7.2.23 | 2024-08-20 | .NET 6.0.425;RPM/DEB 签名证书修正 |
三、贯穿 7.2 全线的破坏性变更与行为修正
破坏性变更(Breaking Changes)在 changelog 中单独成节,是使用方升级前必须核对的部分。7.2 系列累计包含以下关键项:
打包与平台层面
- 7.2.0-preview.5(#15109):Linux deb 与 RPM 包改为 universal 包,不再按具体发行版版本号命名;同一提交系列中还包含“Make universal deb package based on the deb package specification”(#14681)。这意味着安装脚本与仓库地址不再需要绑定精确发行版。
- 7.2.0-preview.5(#15035):强制执行 AppLocker Deny 配置优先于 Execution Policy Bypass 配置——AppLocker 拒绝规则不再会被执行策略旁路绕过。
- 7.2.0-preview.5(#15142):禁止在命令行参数前缀中混用连字符与斜杠,收紧了
pwsh -Command之外参数解析的歧义。 - 7.2.0-preview.7(#15536):
PSDesiredStateConfigurationv2.0.5 模块从产品包中移除,改由 PowerShell Gallery 发布。使用 DSC 的脚本需要显式Install-Module PSDesiredStateConfiguration。 - 7.2.0-preview.9(#15859):Windows 上
pwsh.exe -File仅接受.ps1脚本文件。
日期与格式化行为
- 7.2.0-preview.3(#14549):
Get-Date -UFormat %u修复为符合 ISO 8601(1 表示周一)。 - 7.2.0-preview.4(#14555):
Get-Date -UFormat的%G与%g(ISO 8601 年号)行为修正。
输出渲染
- 7.2.0-preview.9(#15882):
$PSStyle.OutputRendering默认值改为OutputRendering.Host,并移除OutputRendering.Automatic。 - 7.2.1(Internal 18394):
$PSStyle.OutputRendering默认值进一步改为Ansi,即 GA 后默认启用 ANSI 渲染。
原生命令参数传递
- 7.2.0-preview.5(#14692):引入实验特性
PSNativeCommandArgumentPassing,默认使用 .NET 的ArgumentList机制启动原生可执行文件(被标注为 breaking change),改变了参数引号转义与空格处理的行为; - 7.2.0-preview.8(#15408):为该变量增加 Windows 模式,允许部分已知命令回退到旧式参数传递。
当前仓库的源码印证了该特性至今的形态:NativeCommandProcessor.cs 中维护着一份“触发 Legacy 行为的可执行文件列表”,在 Windows 模式下通过 ShouldUseLegacyPassingStyle(filePath) 判断是否对特定程序(如 cmd 系列调用)回退旧式参数解析,其余情况走 startInfo.ArgumentList 路径。
四、7.2 引入的核心新特性(预览期沉淀,GA 转正)
1. ANSI 渲染与 $PSStyle(PSAnsiRendering)
7.2 最显著的用户可见特性之一。演进链如下:
- 7.2.0-preview.2(#13758):实验特性
PSAnsiRendering引入$PSStyle,支持通过它启用 ANSI 格式化并抑制 ANSI 输出; - 7.2.0-preview.3:支持删除线与超链接(#14461),修复闪烁码(#14447);
- 7.2.0-preview.5:
$PSStyle渲染尊重TERM与NO_COLOR环境变量(#14969);不支持虚拟终端时进度条回退为ProgressView.Classic(#15048); - 7.2.0-preview.4:增加
UseOSCIndicator设置以在终端启用进度指示器(#14927); - 7.2.0-preview.3:实验特性
PSAnsiProgress提供基于 ANSI 的最小进度条(#14414); - 7.2.0-preview.8:
Format-List使用$PSStyle.Formatting.FormatAccent、Format-Table使用$PSStyle.Formatting.TableHeader(#14406);Get-Error用错误色高亮异常Message并对PositionMessage加下划线(#15786); - 7.2.0-preview.9(#15864):
PSAnsiRendering、PSAnsiProgress、PSUnixFileStat、PSCultureInvariantReplaceOperator、PSNotApplyErrorActionToStderr五个实验特性整体转正为稳定特性。
一个可验证的旁证:当前默认分支的实验特性清单(experimental-feature-linux.json、experimental-feature-windows.json)中已经不存在 PSAnsiRendering 等条目,仅剩 PSFeedbackProvider、PSSubsystemPluginModel 等新特性——这与 changelog 中“转正即从实验列表移除”的描述一致。
2. 跨平台 DSC
- 7.2.0-preview.3 的引擎更新说明:配合 PowerShell Gallery 的
PSDesiredStateConfigurationv3 模块,Get-DscResource、Invoke-DscResource与 DSC 配置编译可在所有受支持平台使用(基于类式 DSC 资源); - 7.2.0-preview.6(#15127):跨平台 DSC 代码移入 PowerShell 引擎子系统(engine subsystem),从“模块内实现”变成引擎级扩展点。
3. Remove-Item 对 OneDrive 的支持(一次完整回退-重做)
该特性在 changelog 中留下了罕见的三段式记录:preview.5 增强 -Recurse 支持 OneDrive(#14902)→ preview.6 重新实现(#15260)→ preview.7 因长路径问题整体回退(#15546)→ preview.9 再增强(#15571)。阅读该 changelog 时可以把它当作“破坏性回退也会被如实记录”的典型案例。
4. 其他值得注意的命令修正
- 7.2.0-preview.4:
Start-Process移除环境块 32,767 字符上限(#14111);DFS 路径下Move-Item改用 copy-delete(#14913);Web cmdlet 不再把可能的敏感信息写入 verbose 流(#14788); - 7.2.0-preview.5:
ConvertTo-Json最小深度改为 0(#14830);Set-Clipboard允许空字符串(#14579);-replace运算符IEnumerable变体优化; - 7.2.0-preview.6:
ForEach-Object -Parallel嵌套调用变量修复(#14548);Unix 下管线释放时结束原生进程(#15287);Add-Type受限机器 NoLanguage 模式禁止(preview.9 的 #16245 为 rc 阶段补充); - 7.2.0-preview.9:
Set-Clipboard增加-PassThru(#13713);Tee-Object增加-Encoding(#12135);Write-Error的-Exception/-ErrorRecord变为位置参数 0(#13813);ConvertTo-Csv在-UseQuotes AsNeeded下正确转义含引号与换行的字段(#15765); - 7.2.0-rc.1(#16165):
FileSystemInfo.Target从CodeProperty改为指向FileSystemInfo.LinkTarget的AliasProperty,符号链接目标查询更直接; - 7.2.0-preview.1:
Start-Transcript的GetEncoding默认回退编码改为 UTF8 无 BOM(#13732),避免转写文件出现 BOM; - 7.2.1(#16535):框架依赖(framework-dependent)包恢复
pwsh.exe,保证Start-Job在最小安装下可用——这是 GA 后第一个补丁版本中影响面较大的行为回补。
五、LTS 服务节奏:7.2.1 到 7.2.23 的服务版解析
7.2 GA 之后的 23 个补丁版本呈现清晰的 LTS 服务模式:绝大多数条目为 Build and Packaging Improvements,其中规律性最强的是 .NET 6 运行时/SDK 的跟随升级,形成了一条可追溯的 .NET 基线演进线:
| 版本 | .NET 6 基线 | 同期值得关注的变更 |
|---|---|---|
| 7.2.4 | SDK 6.0.203 | RPM 包增加 sha256 摘要(#17215);空 Get 不携带 content-length 头(#16587) |
| 7.2.6 | SDK 6.0.8(#17589) | ForEach-Object -Parallel 脚本块变量修复(#16564);MSI 增加 Microsoft Update 选项 |
| 7.2.7 | SDK 6.0.402 | 停止采集 ApplicationType 遥测(#18168);Invoke-WebRequest 移除 1 秒最小延迟(#18170) |
| 7.2.8 | SDK 6.0.403 | System.Data.SqlClient 4.8.4 → 4.8.5(#18515) |
| 7.2.9 | 6.0.13 | 修复 JEA 会话函数泄漏(Internal 23821 & 23819);Linux 构建产物增加 Authenticode 签名 |
| 7.2.10 | 6.0.14 / SDK 6.0.406 | 7.2.x 标记为 latest LTS;发布流水线增加框架依赖包测试 |
| 7.2.12 | 6.0.411 | backport 工具化(#19568);校验包内许可证数据(#19543) |
| 7.2.14 | 6.0.414 | rhel9 RPM 发布(#20234);MSI 安装注册表写入 ProductCode(#20233) |
| 7.2.16 | 6.0.416 | mariner2 arm64 打包与 PMC 发布(#20564、#20567) |
| 7.2.17 | 6.0.417 | ErrorRecord 脱敏 Auth 头(Internal 28411)——安全相关 |
| 7.2.18 | SDK 6.0.418 | runtimeconfig.json 设置 rollForwardOnNoCandidateFx 为 1,仅在 minor/patch 版本间向前滚动(#20689) |
| 7.2.20 | .NET 6.0.31 | 限制发布:仅 .NET SDK 容器镜像;全局工具生成方式与 WiX 打包流程调整 |
| 7.2.21 | — | 7.2.20 从容器渠道扩展到广泛发布;为 PowerShell.Windows.x64 全局工具生成 powershell.config.json(#23941) |
| 7.2.22 | 6.0.424 | 导入文件与模块清单引用文件的路径解析修复(Internal 31777 31788) |
| 7.2.23 | 6.0.425 | RPM/DEB 使用正确签名证书(#21522);PackageManagement 升级到 1.4.8.1 |
其中两个变更可以直接在当前仓库源码中找到落点:
- 运行时滚动策略:7.2.18 引入的
rollForwardOnNoCandidateFx设置对应 src/powershell-unix/runtimeconfig.template.json,文件内注释写明 “This is required to roll forward to supported minor.patch versions of the runtime.”,值为1(仅 minor/patch)。src/powershell-win-core/runtimeconfig.template.json 与 src/Microsoft.PowerShell.GlobalTool.Shim/runtimeconfig.template.json 采用相同配置。其效果是:7.2 框架依赖包只会在 .NET 6 的 minor/patch 之间向前滚动,不会跳到 .NET 8/9 等更高主版本,这正是 LTS 包“运行时基线锁定”的实现方式。 - Windows 全局工具:7.2.20/7.2.21 围绕
PowerShell.Windows.x64全局工具的重构,对应 src/GlobalTools/PowerShell.Windows.x64/PowerShell.Windows.x64.csproj——PackAsTool=true、ToolCommandName=pwsh,引用 SDK 与诊断、CimCmdlets、WSMan 等项目。需要说明的是,当前默认分支已迁移到 .NET 11 preview(见 global.json 与 DotnetRuntimeMetadata.json),该 csproj 的TargetFramework已是net11.0;7.2 时代对应的是net6.0基线。
打包与供应链方面的里程碑(均见于 7.2 changelog 的 Build and Packaging 条目):rc.1 起主包附带 Software Bill of Materials(#16202),7.2.2 增加发布包 SBOM manifest(#16641);7.2.0-preview.2 起 Linux/macOS/NuGet 与第三方签名逐步迁移到 ESRP;7.2.20 起引入 vPack 发布通道。这些条目的价值在于:LTS 补丁版中看似琐碎的“Build and Packaging Improvements”实际承载了签名、SBOM、发布通道等供应链合规能力。
六、安全相关条目速查
对 LTS 用户而言,补丁版中真正必须关注的是安全与行为安全条目,7.2 系列中包括:
- 7.2.9:JEA(Just Enough Administration)会话函数泄漏修复;
- 7.2.15:受限远程会话中阻止从网络位置获取帮助(Internal 27699);
- 7.2.17:ErrorRecord 中的 Auth 头内容脱敏(Internal 28411);
- 7.2.22:导入文件与模块清单引用文件的路径解析修复(Internal 31777 31788);
- rc 阶段(进入 7.2.0 GA 前):AppLocker 系统锁定时禁止 COM 调用(#16268)、锁定机器 NoLanguage 模式禁止
Add-Type(#16245)。
七、使用与核查建议
- 版本定位:
$PSVersionTable.PSVersion主版本为 7.2 的部署即处于 LTS 服务线,应跟进到系列最新版本(按本 changelog 为 7.2.23,2024-08-20),以获得全部上述安全与服务性修复; - 升级前核对破坏性变更:从 7.1 升 7.2 的脚本需重点核对第四节列出的行为变化,尤其是
PSDesiredStateConfiguration模块不再随包附带、Get-Date -UFormat语义修正、$PSStyle.OutputRendering默认Ansi、以及原生命令ArgumentList参数传递; - 运行时滚动行为:框架依赖安装受
rollForwardOnNoCandidateFx: 1约束,仅在同一 major 内向前滚动(见 src/powershell-unix/runtimeconfig.template.json),跨大版本升级需显式更换安装包; - 追踪机制:本仓库采用按主版本分文件、按小节折叠细节的 changelog 组织方式(索引见 CHANGELOG/README.md),每条记录附 PR 编号(如 #15109)或内部工单号,可据此在代码评审历史中定位具体提交;
- 适用前提说明:当前仓库为默认分支(master),
global.json指向 .NET 11 preview SDK,因此诸如 PowerShell.Windows.x64.csproj 中的net11.0目标框架反映的是 7.2 之后的演进状态;7.2 系列自身的 .NET 6 基线以 CHANGELOG/7.2.md 的逐版本记录为准。
八、小结
CHANGELOG/7.2.md 不仅是一份补丁清单,而是 PowerShell 首个 .NET 6 LTS 系列的完整档案:预览期密集落地了 ANSI 渲染、原生命令新参数传递、跨平台 DSC 引擎化等特性并完成转正;GA 后通过 23 个服务版持续跟随 .NET 6 运行时基线,同时沉淀了 SBOM、ESRP 签名、vPack 通道、rollForwardOnNoCandidateFx 运行时锁定等供应链与兼容性机制。对运维方而言,它回答“该升到哪个补丁”;对开发者而言,它是 7.2 行为边界的一手权威依据。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0623
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00