PowerShell 7.3 版本演进完全指南:从 clean 块、exec 命令到 .NET 7 升级的 22 个发布版本
本文基于仓库中的 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 | exec、Start-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 处:
clean代码块转正(preview.1,#15177):脚本块新增与begin、process、end平级的clean块,用于脚本块结束后的资源清理。这是语言层面的新增关键字,依赖begin/process/end三块结构的解析逻辑需要重新审视。$PSStyle.OutputRendering默认值改为Ansi(Internal 18449):终端输出默认走 ANSI/VT 序列渲染。对不支持 VT 的主机,引擎会回退为PlainText输出(preview.1 中的 #16092 修复)。ObjectSecurity类型数据迁移(preview.7,#16355):System.Security.AccessControl.ObjectSecurity的类型数据定义从核心引擎移至Microsoft.PowerShell.Security模块。从源码结构看,这解释了为何当前仓库src/Modules/下按 Windows/Unix 分平台维护模块清单,而该类型的格式化定义归入安全模块。- 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 等贡献者完成,日志中可归纳为四类:
- 类型推断:preview.5 中改进类型推断与补全(#16963)、为带类型参数的泛型方法增加推断(#16951);preview.7 中改进
$_的类型推断(#17716)、修复ICollection的类型推断(#17752); - 成员/属性补全:preview.4 中改进成员自动补全(#16504);preview.5 中改进命令参数中数组元素补全(#17078)、
param块内多处补全问题修复(#17489); - 参数与约束补全:preview.4 中
ValidateSet补全优先级高于枚举(#15257);preview.6 修复ValidateSet值补全回归(#17628);preview.7 中修复代理命令ValidateRange的枚举范围(#17572)、改进动态参数补全(#17661); - 特殊场景: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.cs(EnabledExperimentalFeatureNames 在类型初始化器中构建只读集合,IsEnabled 通过名称查询),配套命令在 GetExperimentalFeatureCommand.cs 与 EnableDisableExperimentalFeatureCommand.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):原生命令新式参数引用规则转正,随后各版本持续用"旧式名单"(sqlcmd、find.exe等)做兼容治理;PSExec(#18045):exec命令转正;PSRemotingSSHTransportErrorHandling(#18046):SSH 传输错误处理转正。
可以用当前仓库验证该机制的延续性:experimental-feature-linux.json 与 experimental-feature-windows.json 列出了当前代码树默认启用的实验特性(如 PSFeedbackProvider、PSSerializeJSONLongEnumAsNumber、PSSubsystemPluginModel 等)。7.3 中转正的 PSExec、PSCleanBlock、PSNativeCommandArgumentPassing 已不在其中——从源码结构看,特性转正后即从实验清单移除,成为默认行为。
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);Target从CodeProperty改为指向FileSystemInfo.LinkTarget的AliasProperty(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 移除APIScan的surrogateFile设置(#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 引入的机制仍完整保留,可用以下路径复核:
- 实验特性机制:ExperimentalFeature.cs 中
EnabledExperimentalFeatureNames的只读初始化(约 L93-L140)与IsEnabled查询(L287 附近);当前启用的特性清单见 experimental-feature-linux.json(Linux)与 experimental-feature-windows.json(Windows),两份清单一致。 - 原生命令参数传递:7.3 转正的
PSNativeCommandArgumentPassing在新式/旧式传参分支上的实现集中在 NativeCommandProcessor.cs,$PSNativeCommandArgPassing变量定义在 SpecialVariables.cs。 - 命令行参数:
-ConfigurationFile、-NoProfileLoadTime、-MTA/-STA等 7.3 引入或文档化的参数均可在 assets/manpage/pwsh.1 的 SYNOPSIS 段核对。 - 打包工具链:7.3 期间反复修改的
packaging.psm1、metadata.json、install-powershell.sh分别位于 tools/packaging/packaging.psm1、tools/metadata.json 与 tools/install-powershell.sh,可对照变更日志中各条目观察其演化。
选型建议与小结
结合 CHANGELOG/7.3.md 的全量记录,7.3 系列的技术轮廓可以这样概括:
- 语言面:
clean块、exec、ordered加速器、-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)切入可获得该系列全部安全修复。
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