首页
/ PowerShell 7.3 版本演进完全指南:从 clean 块、exec 命令到 .NET 7 升级的 22 个发布版本

PowerShell 7.3 版本演进完全指南:从 clean 块、exec 命令到 .NET 7 升级的 22 个发布版本

2026-09-05 14:06:38作者:袁立春Spencer

本文基于仓库中的 7.3 变更日志 撰写,完整梳理 PowerShell 7.3 从 7.3.0-preview.1(2021-12-16)到 7.3.12(2024-04-11)共 22 个发布版本的演进脉络:包括 clean 代码块、exec 命令、-ConfigurationFile 会话配置等语言与引擎能力的引入,6 个实验特性的批量转正,以及安全修复、构建打包(SBOM、签名、OneBranch 协同构建)与 .NET 7 运行时升级的全过程。读完后你将掌握 7.3 系列每个版本的核心变更、适用场景与在源码中验证这些特性的方法。

7.3 版本线全景:22 个版本的发布节奏

CHANGELOG/7.3.md 按时间倒序记录了 7.3 系列的完整版本线:8 个预览版(preview.1~preview.8)、1 个候选版(rc.1)和 13 个稳定版(7.3.0~7.3.12)。整体节奏是"前 10 个月密集迭代语言特性,GA 后转入安全补丁与构建维护":

阶段 版本 日期 定位
预览期 7.3.0-preview.1 2021-12-16 引入 clean 块、ANSI 渲染默认化
预览期 7.3.0-preview.2 2022-02-24 execStart-Sleep -Duration、SSH 选项支持
预览期 7.3.0-preview.3 2022-03-21 引擎解析修复,升级 .NET 7 preview.2
预览期 7.3.0-preview.4 2022-05-23 移除 BinaryFormatter、成员补全增强
预览期 7.3.0-preview.5 2022-06-21 -ConfigurationFile 命令行参数
预览期 7.3.0-preview.6 2022-07-18 ConvertFrom-Json -AsHashtable 有序化、SHA256 默认签名
预览期 7.3.0-preview.7 2022-08-09 大规模补全体验改进、ordered 类型加速器
预览期 7.3.0-preview.8 2022-09-20 6 个实验特性批量转正
候选期 7.3.0-rc.1 2022-10-26 PowerShell Direct 迁移 ComputeCore.dll
GA 7.3.0 2022-11-08 基于 .NET 7 GA 构建正式发布
维护期 7.3.1 ~ 7.3.12 2022-12-13 ~ 2024-04-11 安全修复、.NET 7 运行时补丁(7.0.3 → 7.0.18)、SBOM/签名/OneBranch 构建演进

这种节奏本身是一个重要信息:7.3 的 GA 构建基于内部 .NET 7 GA 构建(Internal 23096),此后每个稳定版都同步提升 .NET 运行时补丁级别(7.3.2→7.0.2、7.3.3→7.0.3、7.3.4→7.0.5、7.3.6→7.0.306、7.3.7→7.0.401、7.3.9→7.0.403、7.3.10→7.0.404、7.3.11→7.0.405、7.3.12→7.0.18),使 7.3 作为长期受支持版本持续获得底层安全更新。

破坏性变更:升级 7.3 前必须知道的 4 处行为改变

变更日志将 "Breaking Change" 单独成节,7.3 系列共有 4 处:

  1. clean 代码块转正(preview.1,#15177):脚本块新增与 beginprocessend 平级的 clean 块,用于脚本块结束后的资源清理。这是语言层面的新增关键字,依赖 begin/process/end 三块结构的解析逻辑需要重新审视。
  2. $PSStyle.OutputRendering 默认值改为 Ansi(Internal 18449):终端输出默认走 ANSI/VT 序列渲染。对不支持 VT 的主机,引擎会回退为 PlainText 输出(preview.1 中的 #16092 修复)。
  3. ObjectSecurity 类型数据迁移(preview.7,#16355)System.Security.AccessControl.ObjectSecurity 的类型数据定义从核心引擎移至 Microsoft.PowerShell.Security 模块。从源码结构看,这解释了为何当前仓库 src/Modules/ 下按 Windows/Unix 分平台维护模块清单,而该类型的格式化定义归入安全模块。
  4. PowerShell Direct 改用 ComputeCore.dll(rc.1,#18194):PowerShell Direct 依赖的 COM 承载程序集由 Microsoft.PowerShell.Commands.dll 换成 ComputeCore.dll。依赖 PowerShell Direct 的现有自动化代码需要重新评估引用方式。

另外有两处"准破坏性"行为调整值得注意:preview.8 中 PSNativePSPathResolution 实验特性被直接移除(#17670),以及 preview.2 中为生成的代理函数修复 clean 块(#16827)。如果你的脚本依赖 Set-StrictMode -Version 的旧行为或 AppExeCLinks 链接目标解析(preview.1 中移除,#16044),升级时应专项测试。

语言与引擎:clean 块、exec 与补全体验的代际提升

clean 块与脚本块语义

clean 块(#15177)是 7.3 最重要的语言特性,其定位是脚本块生命周期中的一次"finally":无论 process 块因管道结束还是异常退出,clean 中的清理逻辑都会执行。预览期围绕它还有配套修复:preview.4 的 #17112 保证特性关闭时不再生成带 clean 块的代理函数,preview.2 的 #16827 修复生成代理函数中 clean 块的问题。preview.8 中 PSCleanBlock 实验特性正式转正(#18043)。

exec 命令与 bash 兼容

exec 是 7.3 为 bash 用户引入的过渡命令,演进过程完整记录在日志中:

  • preview.2(#16462):新增 exec 命令用于 bash 兼容;
  • 7.3.1(#18644)exec 从别名(alias)改为函数(function)以处理任意参数——别名无法像函数那样灵活地转发不定数量参数;
  • preview.8(#18045)PSExec 实验特性转正。

同期还引入了 sqlcmd 进入"旧式参数传递"名单(7.3.1,#18645 #18646),以及 find.exe 加入 Windows 旧式参数绑定行为(preview.7,#17715)——这些都是 PSNativeCommandArgumentPassing 特性转正后的配套治理:新式参数引用规则对个别命令行工具会造成回归,需要按工具名单回退到 Windows PowerShell 时代的传参方式。

命令行参数扩展

  • -ConfigurationFile(preview.5,#17447)pwsh 新增 -ConfigurationFile 参数支持本地会话配置(Local Session Configuration)文件。该参数已固化进 man page,见 assets/manpage/pwsh.1 的 SYNOPSIS 行,与 -ConfigurationName 并列出现。7.3.7 还专门"Update man page to match current help for pwsh"(#20249)保证 man page 与帮助一致。
  • -noprofileloadtime(preview.7,#17535)pwsh 新增启动横幅显示加载 profile 所耗时间的开关,配合 Start-PSHostProcess 等诊断场景排查 profile 慢加载问题。
  • Start-Sleep -Duration <timespan>(preview.2,#16185):支持传入 TimeSpan 对象直接睡眠,替代 -Seconds 3600 这类整数写法。
  • Invoke-Command -StrictMode(preview.2,#16545):允许在本地调用命令时显式指定严格模式版本。
  • OpenSSH 选项支持(preview.2,#12802)New-PSSession 等 PSRP over SSH 命令开始接受 OpenSSH 配置选项。

类型推断与 Tab 补全的大规模改进

preview.6 ~ preview.8 是补全体验的集中提升期,主要由 MartinGC94 等贡献者完成,日志中可归纳为四类:

  1. 类型推断:preview.5 中改进类型推断与补全(#16963)、为带类型参数的泛型方法增加推断(#16951);preview.7 中改进 $_ 的类型推断(#17716)、修复 ICollection 的类型推断(#17752);
  2. 成员/属性补全:preview.4 中改进成员自动补全(#16504);preview.5 中改进命令参数中数组元素补全(#17078)、param 块内多处补全问题修复(#17489);
  3. 参数与约束补全:preview.4 中 ValidateSet 补全优先级高于枚举(#15257);preview.6 修复 ValidateSet 值补全回归(#17628);preview.7 中修复代理命令 ValidateRange 的枚举范围(#17572)、改进动态参数补全(#17661);
  4. 特殊场景:preview.3 中改进 Hashtable 多场景补全(#16498);preview.2 中阻止对单个短横线的命令补全(#16781)、新增 Break/Continue 后循环标签补全(#16438);preview.7 中为字典索引表达式补全(#17619)、变量补全时不再错误地去掉花括号(#17751)。

引擎层重要修复(选摘)

  • preview.4(#17133):PSRP 序列化移除对 BinaryFormatter 的使用——这是一个长期安全债的偿还,配合 .NET 生态全面弃用 BinaryFormatter 的方向;
  • preview.5(#17174)ParenExpression 中的变量赋值现在返回变量值;
  • preview.4:修复 return 语句无值时的行断点问题(#17179);修复 UNC 网络共享路径补全支持正斜杠(#17111、#17117);
  • 7.3.2(#18916):修复 SuspiciousContentChecker.Match 在文本以预定义字符串开头时的检测问题;
  • 7.3.4:为 AmsiUtil 增加插桩并使 init 变量只读(#18727)、修复 NanoServer 因缺少 AMSI 导致的支持问题(#18882)、为遥测退出增加缺失的保护以消除导入模块时的 NullReferenceException(#18949)。

实验特性机制:从 preview.2 引入到 preview.8 批量转正

7.3 是 PowerShell 实验特性机制(experimental feature)成熟的关键版本。机制入口在 src/System.Management.Automation/engine/ExperimentalFeature/ExperimentalFeature.csEnabledExperimentalFeatureNames 在类型初始化器中构建只读集合,IsEnabled 通过名称查询),配套命令在 GetExperimentalFeatureCommand.csEnableDisableExperimentalFeatureCommand.cs

7.3 系列中实验特性相关的事件线:

事件 版本 说明
PSAMSIMethodInvocationLogging 引入 preview.2(#16496) AMSI 方法调用日志
PSNativePSPathResolution 移除 preview.7(#17670) 未转正即移除
PSStrictModeAssignment 回退 preview.8(#18040) 实验特性被撤回
6 个特性转正 preview.8 见下表

preview.8 一次性转正的 6 个实验特性:

  • PSAMSIMethodInvocationLogging(#18041):AMSI 方法调用日志,配合 7.3.4 的 AmsiUtil 插桩修复落地;
  • PSAnsiRenderingFileInfo(#18042):ANSI 渲染下文件系统对象显示;
  • PSCleanBlock(#18043)clean 块转正;
  • PSNativeCommandArgumentPassing(#18044):原生命令新式参数引用规则转正,随后各版本持续用"旧式名单"(sqlcmdfind.exe 等)做兼容治理;
  • PSExec(#18045)exec 命令转正;
  • PSRemotingSSHTransportErrorHandling(#18046):SSH 传输错误处理转正。

可以用当前仓库验证该机制的延续性:experimental-feature-linux.jsonexperimental-feature-windows.json 列出了当前代码树默认启用的实验特性(如 PSFeedbackProviderPSSerializeJSONLongEnumAsNumberPSSubsystemPluginModel 等)。7.3 中转正的 PSExecPSCleanBlockPSNativeCommandArgumentPassing 已不在其中——从源码结构看,特性转正后即从实验清单移除,成为默认行为。

Cmdlet 更新:跨版本的实用命令修复与增强

7.3 的 "General Cmdlet Updates and Fixes" 条目数量庞大,按主题归类的要点如下(均出自 CHANGELOG/7.3.md):

  • JSON 与序列化ConvertFrom-Json -AsHashtable 改用有序哈希表(preview.6,#17405);反序列化导入的有序字典修复(preview.7,#15545);新增 ordered 类型加速器指向 OrderedDictionary(preview.7,#17804);ConvertTo-Json -Depth 上限放宽到 100(preview.1,#16197);Test-Json 修复根节点非对象类型(preview.7,#17741)。
  • 文件系统Get-ChildItem 在配合 -Recurse 时将路径尾部斜杠视为目录指示(preview.7,#17704);FileSystemProvider 修复卷与管道路径支持(preview.7,#15873);为 FileSystem 项新增 .ResolvedTarget 属性反映符号链接目标(preview.2,#16490);TargetCodeProperty 改为指向 FileSystemInfo.LinkTargetAliasProperty(preview.1,#16165);用 FindFirstFileW 替换 FindFirstFileExW 以正确处理 FAT32 上的 Unicode 文件名(preview.2,#16840);Move-Item 修复仅在特定场景回退到"复制+删除"的回归(preview.1,#16029),并禁止把目录移动到自身内部(preview.1,#16198)。
  • Web 命令:Web cmdlets 新增 -HttpVersion 参数(preview.1,#15853);支持开放式输入标签(preview.1,#16193);空 Get 请求不再携带 content-length 头(preview.2,#16587)。
  • 格式化与显示:错误格式化改用 $PSStyle.Formatting 定义的配色(preview.8,#17987);列表中十进制数按当前区域性渲染(preview.7,#17650);Out-String/Out-File 保持字符串输入不变(preview.5,#17455);Out-GridView 使用前移除字符串中的 ANSI 转义序列(preview.6,#17664);Format-Wide 修复 NullReferenceException(preview.1,#15990)。
  • 作业与进程Start-Job 改用 PowerShell 方式检查工作目录存在性(7.3.2,#18917);Switch-Process 系列三连修(7.3.1:复制当前环境变量 #18632、为子进程设置合适的 termios #18572;7.3.2:错误信息包含未找到的命令 #18650);Stop-Service 在不设置 SDDL 时只申请所需权限(preview.4,#16663)。
  • 签名与证书Set-AuthenticodeSignature 默认哈希改为 SHA256(preview.6,#17560);支持 HTTPS 的 -TimeStampServer(preview.7,#16134);ConvertTo-SecureString 修复 .NET 破坏性变更导致的密钥回归(preview.1,#16068)。
  • 其他Add-Type -PassThru 过滤编译器生成类型(preview.8,#18095);New-TimeSpan 新增 -Milliseconds(preview.6,#17621);Get-CimClass 新增 -Amended 开关(preview.5,#17477);Measure-Object 在严格模式外忽略缺失属性(preview.2,#16589);Sort-Object -Stable -Unique 真正稳定排序(preview.4,#17189);Export-PSSession 对根路径不再抛错(preview.6,#17671);生成的隐式远程模块恢复与 PowerShell 5.1 的向后兼容(preview.7,#17227)。

安全修复:7.3 维护期的核心主线

GA 之后的 7.3.x 稳定版以安全与可靠性修复为主,值得单独追踪:

  • 7.3.2:修复 SuspiciousContentChecker.Match 前缀匹配缺陷(#18916);修复 JEA 会话函数泄漏问题(Internal 23820)。JEA 会话状态隔离是受限环境部署的关键,此类泄漏属于高优先级修复。
  • 7.3.8(安全修复节):阻止在受限远程会话中从网络位置获取帮助(Internal 27698)。这一条直接限制了受限 remoting 场景下的信息外带路径。
  • 7.3.10(安全相关):从 ErrorRecord 中擦除 Auth 头内容(Internal 28410),避免认证凭据残留在错误对象中被日志或 Get-Error 意外捕获。
  • preview.1 期间的锁定加固:AppLocker 系统锁定下全面禁止 COM(#16268);锁定机器上禁止 NoLanguage 模式的 Add-Type(#16245);Max_PATH 长路径检查修复(#16487)。
  • preview.2(#16542、#16683):为 remoting 内部增加锁与空检查,消除并发风险。
  • preview.4(#17231):修复可解析到当前目录位置的模块搜索路径部分缺失问题,堵住模块加载路径的一个解析偏差。
  • preview.2(#16205):修复 SSH 端点启用 banner 时的 SSH remoting 问题;preview.8 转正的 PSRemotingSSHTransportErrorHandling 则系统性改善了 SSH 传输层错误处理。

对运维侧的含义:如果生产环境运行 7.3.x,至少应升级到 7.3.8 以上以获得受限远程帮助阻断,并尽量跟进 7.3.12 以获得 .NET 7.0.18 运行时补丁。

构建与打包:SBOM、签名、OneBranch 与 .NET 7 升级

7.3 的 "Build and Packaging Improvements" 是每个版本中条目最多的部分,反映了 7.3 承担的是"供应链现代化"工程。可归纳为六条主线:

1. .NET 7 迁移与运行时策略

  • preview.1 起从 .NET 6 RC1 构建起步(#15981、#16296),preview.2 因 .NET 7 Preview 1 阻塞问题一度回退(#16856 前的 revert),preview.3 起正式跟随 .NET 7 preview.2(#16930),此后每个预览版随 .NET 7 预览版前移(preview.5→7.0.100-preview.5,preview.6→preview.6,preview.7→preview.7,preview.8→rc.1),GA 版本落地 .NET 7 GA(Internal 23096)。
  • 7.3.11(#20689):将 runtimeconfig.json 中的 rollForwardOnNoCandidateFx 设置为仅在 minor 和 patch 版本上滚动,收紧运行时回退策略,避免框架依赖包意外滚动到更高的主版本。
  • 维护期每个稳定版同步提升 .NET 7 补丁级(见开头节奏表)。

2. 软件物料清单(SBOM)与合规

  • preview.1:向主包添加 SBOM(#16202)、向 NuGet 包添加 SBOM manifest(#16711);引入 cgmanifest.json 生成第三方许可证清单(#16266、#16278),并建立 tools/cgmanifest/ 目录下的 manifest 与 tools/metadata.json 协同。
  • preview.2:Global Tool 打包重构包含 SBOM 生成(#16860);确保 alpine 与 arm SKU 携带启用实验特性的 powershell.config.json(#16823)。
  • 7.3.9:为 release 管线添加 SBOM(#20519,#20573);7.3.11:合规运行前删除 ref 文件夹(#20373);7.3.12 移除 APIScansurrogateFile 设置(#21238)。

3. 代码签名

  • GA 7.3.0:Linux 构建的 managed 程序集启用 Authenticode 签名(#18440);
  • 7.3.1:Linux 文件 Authenticode 签名后应用预期文件权限(#18647);
  • preview.8:确保 Security.types.ps1xml 在 release 构建中被签名(#17930);
  • 7.3.5:vPack 构建中验证包携带许可证数据(#19543)。

4. 发行版覆盖扩展

  • 7.3.7:发布 RHEL 9 的 RPM 包(#20245);为 Mariner arm64 添加包构建与发布(#20250、#20251),并添加运行与打包类型信息(#20244);7.3.8 添加 mariner arm64 稳定通道映射(#20310);
  • preview.4:install-powershell.sh 增加 SLES 15 支持(#16984);RPM 包添加 sha256 摘要(#16896);
  • preview.2:macOS 安装程序在 Apple Silicon 上无需 Rosetta 即可运行(#16742);
  • 7.3.6:MSI 安装时在注册表写入 ProductCode(#19951),配合 Microsoft Update 注册与卸载识别。

5. 构建管线现代化

  • preview.2/preview.1:构建与发布切换到自定义镜像(#16801)、从 PkgES 托管代理迁移到 1ES 托管代理(#16023);移除对 cmake 的全部构建引用(#16578)。
  • 7.3.12:建立 PowerShell 协同构建 OneBranch 管线(#21364)、官方构建管线多项修复(#21408)、OneBranch 环境变量校验(#21441)——这是微软内部构建体系与开源仓库的对接。
  • 7.3.7:启用 vPack provenance 数据(#20253)、开始使用新版 packages.microsoft.com CLI(#20252)。

6. 文档与元数据

  • 7.3.5 起 metadata.json 将 7.3 标记为 stable 通道最新(#19565);7.3.6 更新 README 入门链接(#19947);7.3.7 同步 man page 与当前帮助(#20249)。

在当前仓库中验证 7.3 的遗产

虽然当前代码树已演进到更新的版本(global.json 声明的 .NET SDK 与 DotnetRuntimeMetadata.json 中的运行时通道均高于 7.3 所用的 7.0.x),但 7.3 引入的机制仍完整保留,可用以下路径复核:

  1. 实验特性机制ExperimentalFeature.csEnabledExperimentalFeatureNames 的只读初始化(约 L93-L140)与 IsEnabled 查询(L287 附近);当前启用的特性清单见 experimental-feature-linux.json(Linux)与 experimental-feature-windows.json(Windows),两份清单一致。
  2. 原生命令参数传递:7.3 转正的 PSNativeCommandArgumentPassing 在新式/旧式传参分支上的实现集中在 NativeCommandProcessor.cs$PSNativeCommandArgPassing 变量定义在 SpecialVariables.cs
  3. 命令行参数-ConfigurationFile-NoProfileLoadTime-MTA/-STA 等 7.3 引入或文档化的参数均可在 assets/manpage/pwsh.1 的 SYNOPSIS 段核对。
  4. 打包工具链:7.3 期间反复修改的 packaging.psm1metadata.jsoninstall-powershell.sh 分别位于 tools/packaging/packaging.psm1tools/metadata.jsontools/install-powershell.sh,可对照变更日志中各条目观察其演化。

选型建议与小结

结合 CHANGELOG/7.3.md 的全量记录,7.3 系列的技术轮廓可以这样概括:

  • 语言面clean 块、execordered 加速器、-Duration/-ConfigurationFile 等参数扩展,构成与 7.2 的可感知差异;
  • 引擎面:补全与类型推断的系统性改进、PSRP 去 BinaryFormatter、SSH 传输错误处理转正,使 7.3 成为"体验型"小版本升级;
  • 安全面:JEA 泄漏、受限远程帮助、Auth 头擦除、SuspiciousContentChecker 等修复构成维护期主线,生产环境建议至少 7.3.8+;
  • 供应链面:SBOM(cgmanifest → SPDX)、Linux 程序集 Authenticode 签名、RHEL 9 / Mariner arm64 / SLES 15 等新发行版覆盖,以及 7.3.11 收紧的运行时滚动策略与 7.3.12 的 OneBranch 协同构建,为后续 7.4+ 的发布体系打下基础。

对仍在使用 7.2 的团队,若脚本依赖 begin/process/end 三块结构、旧版原生命令传参或 COM 自动加载,应按"破坏性变更"一节逐项回归;若追求 7.3 的 clean 块与补全体验,则从 7.3.12(.NET 7.0.18)切入可获得该系列全部安全修复。

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

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
528
588
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
906
1.82 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
891
5.78 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.53 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.34 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
987
504
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384