首页
/ PowerShell 7.2 LTS 全版本演进解析:从 preview.1 到 7.2.23 的完整版本档案

PowerShell 7.2 LTS 全版本演进解析:从 preview.1 到 7.2.23 的完整版本档案

2026-09-05 16:28:40作者:农烁颖Land

本文基于仓库中的 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):PSDesiredStateConfiguration v2.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 渲染尊重 TERMNO_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.FormatAccentFormat-Table 使用 $PSStyle.Formatting.TableHeader(#14406);Get-Error 用错误色高亮异常 Message 并对 PositionMessage 加下划线(#15786);
  • 7.2.0-preview.9(#15864):PSAnsiRenderingPSAnsiProgressPSUnixFileStatPSCultureInvariantReplaceOperatorPSNotApplyErrorActionToStderr 五个实验特性整体转正为稳定特性。

一个可验证的旁证:当前默认分支的实验特性清单(experimental-feature-linux.jsonexperimental-feature-windows.json)中已经不存在 PSAnsiRendering 等条目,仅剩 PSFeedbackProviderPSSubsystemPluginModel 等新特性——这与 changelog 中“转正即从实验列表移除”的描述一致。

2. 跨平台 DSC

  • 7.2.0-preview.3 的引擎更新说明:配合 PowerShell Gallery 的 PSDesiredStateConfiguration v3 模块,Get-DscResourceInvoke-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.TargetCodeProperty 改为指向 FileSystemInfo.LinkTargetAliasProperty,符号链接目标查询更直接;
  • 7.2.0-preview.1:Start-TranscriptGetEncoding 默认回退编码改为 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

其中两个变更可以直接在当前仓库源码中找到落点:

  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.jsonsrc/Microsoft.PowerShell.GlobalTool.Shim/runtimeconfig.template.json 采用相同配置。其效果是:7.2 框架依赖包只会在 .NET 6 的 minor/patch 之间向前滚动,不会跳到 .NET 8/9 等更高主版本,这正是 LTS 包“运行时基线锁定”的实现方式。
  2. Windows 全局工具:7.2.20/7.2.21 围绕 PowerShell.Windows.x64 全局工具的重构,对应 src/GlobalTools/PowerShell.Windows.x64/PowerShell.Windows.x64.csproj——PackAsTool=trueToolCommandName=pwsh,引用 SDK 与诊断、CimCmdlets、WSMan 等项目。需要说明的是,当前默认分支已迁移到 .NET 11 preview(见 global.jsonDotnetRuntimeMetadata.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)。

七、使用与核查建议

  1. 版本定位$PSVersionTable.PSVersion 主版本为 7.2 的部署即处于 LTS 服务线,应跟进到系列最新版本(按本 changelog 为 7.2.23,2024-08-20),以获得全部上述安全与服务性修复;
  2. 升级前核对破坏性变更:从 7.1 升 7.2 的脚本需重点核对第四节列出的行为变化,尤其是 PSDesiredStateConfiguration 模块不再随包附带、Get-Date -UFormat 语义修正、$PSStyle.OutputRendering 默认 Ansi、以及原生命令 ArgumentList 参数传递;
  3. 运行时滚动行为:框架依赖安装受 rollForwardOnNoCandidateFx: 1 约束,仅在同一 major 内向前滚动(见 src/powershell-unix/runtimeconfig.template.json),跨大版本升级需显式更换安装包;
  4. 追踪机制:本仓库采用按主版本分文件、按小节折叠细节的 changelog 组织方式(索引见 CHANGELOG/README.md),每条记录附 PR 编号(如 #15109)或内部工单号,可据此在代码评审历史中定位具体提交;
  5. 适用前提说明:当前仓库为默认分支(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 行为边界的一手权威依据。

登录后查看全文
热门项目推荐
相关项目推荐