PowerShell 7.1 版本演进全解析:从 .NET 5 迁移到全生命周期服务修复
本文基于当前仓库 CHANGELOG/7.1.md 完整梳理 PowerShell 7.1 从 2020 年 3 月的 7.1.0-preview.1 到 2022 年 4 月 7.1.7 的整个发布周期。内容覆盖破坏性变更、引擎级行为修复、新 cmdlet 参数与语言特性转正、.NET 5 构建迁移以及跨平台打包的演进,并结合仓库 src 目录下的核心实现源码进行佐证。读完本文,你将能够判断哪些行为变更会影响既有脚本,理解 $?、$ErrorActionPreference、stderr 重定向等运行时语义的演化脉络,并掌握 7.1 版本所承载新特性(如 ForEach-Object -Parallel、Get-Date -AsUTC、子系统插件模型)的实际代码落点,从而为升级、兼容与排障提供准确依据。
阅读提示:本文按「主题+版本时间线」双维度组织。各小节的修复与特性均标注其引入版本;括号内的
#PR号与贡献者致谢摘自原 changelog,保留作者归属以便检索原始 Issue。
一、版本定位与时间线总览
PowerShell 7.1 是在 7.0(首个基于 .NET Core 3.1 的 LTS)之后推出的**非 LTS(STS,标准期限支持)**版本,构建基座为 .NET 5。整条发布链横跨一年多,共经历 7 个预览版(preview.1 ~ preview.7)、2 个候选版(rc.1、rc.2)、正式版 7.1.0 以及 7 个服务更新(7.1.1 ~ 7.1.7)。
| 版本 | 发布日期 | 阶段重点 |
|---|---|---|
| 7.1.0-preview.1 | 2020-03-26 | 迁移 .NET 5 preview.1;-replace 使用固定区域性字符串转换 |
| 7.1.0-preview.2 | 2020-04-23 | ForEach-Object -Parallel runspace 复用;Get-Random -Shuffle |
| 7.1.0-preview.3 | 2020-05-14 | 实验特性「向原生命令传 PSPath」 |
| 7.1.0-preview.4 | 2020-06-25 | Test-Json -SchemaFile;Read-Host -MaskInput |
| 7.1.0-preview.5 | 2020-07-06 | MSI 升级码修复;格式测试加固 |
| 7.1.0-preview.6 | 2020-08-17 | 若干破坏性变更;ComInterop 回归;Get-Date -AsUTC |
| 7.1.0-preview.7 | 2020-09-08 | 子系统插件模型雏形;TLS 1.3 支持 |
| 7.1.0-rc.1 | 2020-09-29 | ComInterop 依据 .NET 团队建议修正 |
| 7.1.0-rc.2 | 2020-10-20 | Get-PSSubsystem 命令落地 |
| 7.1.0 | 2020-11-11 | GA:.NET 5.0 RTM、PSReadLine 2.1.0、Ubuntu 20.04 校验 |
| 7.1.1 | 2021-01-14 | 全面切换 ESRP 签名流水线 |
| 7.1.2 | 2021-02-11 | .NET SDK 5.0.103;发布全局工具包 |
| 7.1.3 | 2021-03-11 | 移除 Start-Process 32K 环境块限制 |
| 7.1.4 | 2021-08-12 | .NET SDK 5.0.400 常规升级 |
| 7.1.5 | 2021-10-14 | 锁定机 Add-Type/遥测加固 |
| 7.1.6 | 2022-03-16 | ARM64 macOS 打包;SBOM 清单 |
| 7.1.7 | 2022-04-26 | .NET 5.0.16 / SDK 5.0.407;部分模块搜索路径修复 |
需要说明的是,当前仓库为 PowerShell 开源代码库的镜像快照,changelog 中 [vX.Y.Z]: compare 形式的版本对比链接指向外部站点,本文不展开外部引用,仅以其文字内容为事实依据。
二、Breaking Changes:脚本兼容性红线的完整清单
7.1 的破坏性变更贯穿 preview.2 ~ preview.7 与 preview.1,是升级迁移时需要优先评估的部分。逐条整理如下:
1. $ErrorActionPreference 不再影响原生命令的 stderr(preview.6)
Make $ErrorActionPreference not affect stderr output of native commands (#13361)。在 7.1 之前,$ErrorActionPreference = 'Stop' 会把写向 stderr 的原生命令输出当作终止性错误;该行为在 7.1 中被移除,stderr 输出回归「仅是数据流」,不再受偏好变量干扰。这是对上一版刚引入行为的纠正,语义上更符合 Unix 工具的流约定。
2. $? 在原生命令写 stderr 时不再置为 $false(preview.7)
Fix $? to not be $false when native command writes to stderr (#13395) 进一步巩固了上述语义:判断一条原生命令是否成功,只依据退出码,而不再依据它是否向 stderr 写过内容。
3. Start-Process 的 -UseNewEnvironment 语义(preview.2)
On Windows, Start-Process creates a process environment with all the environment variables from current session, using -UseNewEnvironment creates a new default process environment (#10830)。Windows 上不再默认以全新的默认环境启动进程,而是继承当前会话全部环境变量;显式传 -UseNewEnvironment 才获取新进程的默认环境。同时更新了 UseNewEnvironment 参数的实现(Update UseNewEnvironment parameter behavior of Start-Process cmdlet on Windows (#10830))。
4. -replace 使用固定区域性(invariant culture)字符串转换(preview.1)
Use invariant culture string conversion for -replace operator (#10954) 消除了 -replace 在土耳其语等区域性下因大小写规则差异导致的替换不一致。该变更同时被列入 Breaking Changes 与 Experimental Features 两个分类,意味着它先以实验特性形式存在、随后转正。
5. 显式命名参数优先于哈希表 splatting(preview.6)
Allow explicitly specified named parameter to supersede the same one from hashtable splatting (#13162):当同一参数既被显式命名又被 splat 传入时,显式命名者胜出,结束了此前「先到先得」造成的歧义。
6. Get-Date 参数更名(preview.6)
Rename -FromUnixTime to -UnixTimeSeconds on Get-Date to allow Unix time input (#13084)。参数名与 .NET API DateTimeOffset.FromUnixTimeSeconds 对齐。仓库中的参数声明位于 GetDateCommand.cs。
7. Split-Path 参数约束(preview.4 / preview.6)
Make the switch parameter -Qualifier not positional for Split-Path (#12960):-Qualifier不再是位置参数;Make other switches mandatory in Split-Path (#13150):其余开关需显式给出,避免歧义调用。
8. Web cmdlet 的 -OutFile 按字面路径处理(preview.4)
Make -OutFile parameter in web cmdlets to work like -LiteralPath (#11701):Invoke-WebRequest/Invoke-RestMethod 的 -OutFile 不再做通配解析,行为与 -LiteralPath 一致。
9. Start-Process 工作目录按字面路径解析(preview.4)
Resolve the working directory as literal path for Start-Process when it's not specified (#11946):未显式指定工作目录时,不再将其当通配符模式展开。
10. BigInteger 数字字面量绑定修正(preview.3)
Fix string parameter binding for BigInteger numeric literals (#11634):修正大整数后缀字面量向字符串参数绑定时的数值语义。
11. 脚本块转委托不再包一层 PSObject(preview.2)
Do not wrap return result to PSObject when converting ScriptBlock to delegate (#10619)(同一 PR 在 preview.2 的 Breaking Changes 与 General Cmdlet Updates 中出现两次),保证委托返回值的类型纯度。
12. $null 语义回退(preview.1)
Revert the PRs that made DBNull.Value and NullString.Value treated as $null (#11648):撤回把 DBNull.Value 与 NullString.Value 当作 $null 处理的改动,维持原有类型区分。
三、语言与实验特性:从实验到默认
7.1 是一个「特性转正」密集的版本,多个实验特性在此收官进入默认行为。
1. 空值条件与空合并系列转正
Move PSNullConditionalOperators feature out of experimental (#13529)(preview.7):?.与?[]运算符转正式;- 引擎层面配套修复
Ensure null-coalescing LHS is evaluated only once (#12667)(preview.4),确保??左侧表达式不会因求值两次而产生副作用(例如(Get-Random)这类调用只执行一次); - preview.4 的代码清理中还有
cleanup: Use coalesce expression (#12829),说明新语法已在引擎自身代码中投入使用。
2. 向原生命令传 PSPath(preview.3 实验 → preview.7 转正)
Support passing PSPath to native commands (#12386)(preview.3 加入实验特性),随后 Move PSNativePSPathResolution feature out of Experimental (#13522)(preview.7 转正)。转正意味着无需 Resolve-Path 手动展开即可把 PSPath(如 Microsoft.PowerShell.Core\FileSystem::… 形式)直接传给外部程序。
3. 子系统(Subsystem)插件模型——「迷你 PowerShell」的基石
- preview.7:
Initial work of the subsystem plugin model (for minimal powershell) (#13186); - rc.2:
Rename Get-Subsystem to Get-PSSubsystem and fix two related minor issues (#13765)。
该模型将 PowerShell 拆解为可插拔的子系统(当前源码中可见的包括预测 PredictionSubsystem、反馈 FeedbackSubsystem、DSC DscSubsystem 等),并通过 GetPSSubsystemCommand.cs 暴露查询入口,管理逻辑集中在 SubsystemManager.cs 与 SubsystemInfo.cs。核心意图是让特定场景可以裁剪出一个最小 PowerShell(只有所需子系统的宿主)。
4. 调试器能力:-Runspace 参数(preview.6 实验)
Add -Runspace parameter to all *-PSBreakpoint cmdlets (#10492):所有 *-PSBreakpoint cmdlet 获得 -Runspace 参数,可将断点操作定向到指定 runspace。
5. 其余转正与还原
- preview.7 中
Revert PSNativePSPathResolution to being an experimental feature (#13734)是中间态回退,随后又被重新转正(见上);这是 7.1 开发中「试错—回退—再转正」的典型轨迹; - 支持按需
using module相对路径中的/(Allow / in relative paths for using module (#7424),preview.3,见 Build 列表); CompleteInput允许在 AST/脚本含匹配函数定义时从ArgumentCompleter返回结果(#10574,preview.1)。
四、引擎级修复与运行时语义演化
1. 管道与进程语义(preview.7)
- 优化
GetSystemLockdownPolicy在非锁定场景下的开销(#13438),即大部分普通用户环境跳过重策略检查; - preview.2 修正
ForEach-Object -Parallel的两类并发问题:Implement ForEach-Object -Parallel runspace reuse (#12122)(runspace 复用,避免每个输入都重建)与Fix possible race that leaks PowerShell object dispose in ForEach-Object -Parallel (#12227);另修复并行循环位于非当前驱动器时的失败(#12197)。
源码佐证:ForEach-Object 并行参数集在 InternalCommands.cs 中声明,包括必选的 ScriptBlock Parallel、ThrottleLimit、-UseNewRunspace 开关;初始化时经 PSTaskPool(见同文件 InitParallelParameterSet)统一调度,runspace 复用与独立 runspace(-UseNewRunspace)两种策略均由该任务池承载。
2. 参数绑定与解析器
- 命令行列式解析重构(
Refactor command line parser to do early parsing (#11482))在 preview.6 完成,配合Add null check for args in CommandLineParser (#13451)使pwsh的-Command/参数解析更早、更稳; - preview.7 增加
CommandLineParser对args的空引用防护; - 参数绑定错误信息修复:
Fix an operator preference order issue in binder code (#12075)、Fix NullReferenceException when binding common parameters of type ActionPreference (#12124)(preview.1)。
3. .NET 互操作与类型系统
- COM 互操作回归与修缮:preview.6
Refresh and enable the ComInterop code in PowerShell (#13304)、Remove ComEnumerator as COM objects using IEnumerator is now supported in .NET 5.0 (#13259);rc.1Make fixes to ComInterop code as suggested by .NET team (#13533)。相关代码位于 engine/ComInterop 目录(共 55 个 C# 源文件),与 .NET 5.0 内建 COM 支持协同; - 内在类型转换器:preview.6
Add support for some .NET intrinsic type converters (#12580),强化LanguagePrimitives的能力; - 其他类型语义:
Improve BigInteger casting behaviors (#12629)、Allow shorter signed hex literals with appropriate type suffixes (#11844)、Fix inconsistent exception message in -replace operator (#12388)。
4. 安全与遥测
- preview.4 起
Restrict loading of amsi.dll to system32 folder (#12730),防止从任意路径加载 AMSI 提供程序(供应链加固); - 7.1.5
Disallow Add-Type in NoLanguage mode on a locked down machine (Internal 17522)与Handle error when the telemetry mutex cannot be created (#15574)(致谢 @gukoff),保证受限机上不可通过Add-Type绕过NoLanguage模式;同一版本Configure ApplicationInsights to not send cloud role name (Internal 17100)收窄遥测字段; - 7.1.7
Do not include node names when sending telemetry (#16981):遥测不再携带节点名,进一步去标识化; - preview.1
Allow cross-platform CAPI-compatible remote key exchange (#11185)与Update CmsCommands to use Store vs certificate provider (#11643)调整证书交互路径。
5. 文件系统与路径
- preview.7
Process reparse points for Microsoft Store applications (#13481):处理 Store 应用挂接点的重解析点; - preview.6
Fix Move-Item to support cross-mount moves on Unix (#13044)、Handle WSL filesystem path when analyze security zone of a file (#13120); - 7.1.1
Avoid an exception if file system does not support reparse points (#13634); - 7.1.7 修复部分模块搜索路径可能被解析到 CWD 的缺陷(
Fix for partial PowerShell module search paths, that can be resolved to CWD locations),避免模块导入时的路径劫持风险。
6. 作业与远程处理
- preview.2
Start-Job在系统未将 Windows PowerShell 注册为默认 shell 时仍可用(#12296);Fix Invoke-Command to detect recursive call of the same history entry (#13197)(preview.6);Re-add check for Invoke-Command job dispose (#11388)(preview.1)与Fix SuspendStoppingPipeline()/RestoreStoppingPipeline() NRE (#11870); - preview.1
Remove network hop restriction for interactive sessions (#11920)取消交互会话的网络跳数限制; - 进程流读取优化:preview.2 使用独立线程读取子进程重定向输出/错误流(
#11713),改善 out-of-proc 作业的死锁表现。
五、Cmdlet 新参数与行为修复亮点
1. Get-Date:-UnixTimeSeconds 与 -AsUTC(preview.6)
-FromUnixTime更名为-UnixTimeSeconds(#13084),此后Get-Date -UnixTimeSeconds 1590000000即可把 Unix 时间戳转成本地DateTime;- 新增
Add -AsUTC to the Get-Date cmdlet (#11611),输入按 UTC 解释输出。
源码佐证(GetDateCommand.cs):UnixTimeSeconds 参数(#L56-L60)与 AsUTC 开关(#L248-L256)分属 UnixTimeSecondsAndFormat/UnixTimeSecondsAndUFormat 等不同参数集(#L573-L574);运行时经 DateTimeOffset.FromUnixTimeSeconds(...).LocalDateTime 转换(#L276),并在输出阶段依据 AsUTC 分支处理(#L329)。相关的行为测试位于 test/powershell/Modules/Microsoft.PowerShell.Utility/Get-Date.Tests.ps1。
2. Test-Json:-SchemaFile(preview.4)
Add parameter SchemaFile to Test-Json cmdlet (#11934)(致谢 @beatcracker),允许用 JSON Schema 文件校验输入 JSON,而不再只做语法校验。源码中 TestJsonCommand.cs 定义了必填的 SchemaFile 参数,并解析出三条独立参数集(字符串/路径/字面路径分别对应 JsonStringWithSchemaFile、JsonPathWithSchemaFile、JsonLiteralPathWithSchemaFile,见 #L28-L34),验证失败时给出明确错误类别(InvalidJsonSchema/JsonSchemaFileOpenFailure,#L194-L213)。
3. Read-Host -MaskInput(preview.4)
Adds -MaskInput parameter to Read-Host (#10908):终端输入以掩码显示但返回明文。配套变更 Change Read-Host -MaskInput to use existing SecureString path, but return as plain text (#13256)(preview.6)统一了内部读取路径。
4. Get-Random -Shuffle(preview.2)
Add -Shuffle switch to Get-Random command (#11093):直接洗牌集合。
5. 格式输出与错误视图(ConciseView)系列修复
- 错误视图健壮性:
ConciseView适配无控制台宽度场景(#11784)、按[Environment]::NewLine切分PositionMessage(#12010)、超宽且无空白错误信息的折行(#11880),以及交互式高级函数写错误时 ConciseView 显示(#13623,rc.1)——可见 7.1 花费大量精力打磨这个默认错误视图的边缘情况; - 默认进度条配色调整以改善对比度(
#11455,preview.2,致谢 @rkeithhill); Format-Hex修复布尔值分组行为(#11587);Format-Custom新增防数据丢失测试(#11393)。
6. Web cmdlet 集修复
- TLS 1.3 支持(preview.7):
Add support for TLS 1.3 in Web cmdlets (#13409); Invoke-RestMethod改用异步流(#11095,preview.1),改善大响应体吞吐;-NoProxy下正确从 body 构造 URI(#14673,7.1.3);忽略 null 值请求头(#11424);Link header 中无引号的 relation-type 正则修正(#11711);<img />检测正则修正(#12099)。
7. 控制台与主机
- preview.6 修正
pwsh两个冲突的简写开关:-s(原 STA)让位(#13262),-inputformat前缀从-in改为-inp以避免与-interactive冲突(#13205)——这意味着pwsh -in不再可用,脚本若使用过旧缩写需改为-inp; - rc.2 修复与 Windows 应用关联文件启动时的阻塞等待(
#13750); - preview.1
Fix help function to check if less is available、Enable pwsh on systems where mpr.dll and STA is unavailable (#11748)。
8. Unix 平台补齐
preview.1 重构 Restart-Computer 并新增 Stop-Computer 的 Linux/macOS 实现(#11319、#11151)——在此之前这两条命令在 Unix 上并不可靠或缺失。
六、测试、工具链与质量保障演进
- Pester 版本策略:preview.2 明确将主 Pester 钉在 4.x(
#12262),规避 Pester 5 破坏性发布带来的测试波动;大量存量测试在 preview.1 完成到 Pester v4 语法的统一(#11544)。 - CI 均衡与平台适配:
Re-balance CI tests (#11420);preview.1 为 Raspbian 修复测试运行(#11661);preview.6Mark Test-Connection -TraceRoute tests as pending;SSH 远程测试补充辅助函数并新增 Ubuntu SSH 远程 CI(#11955、#12033)。 - 静态检查与编辑器生态:
.editorconfig大量扩充(字符集 utf-8 无 BOM、csharp_preferred_modifier_order、OmniSharp 支持),VS Code 推荐扩展由ms-vscode.csharp迁移到ms-dotnettools.csharp(#12083);markdownlint持续安全更新(7.1.0 及 7.1.4 期间多次)。 - 测试基础设施:preview.3
Make CIM tab completion test case insensitive、Mark ping tests as Pending;preview.6 去 DNS 依赖(macOSTest-Connection);7.1.7 重新启用指向 PowerShell Gallery 的PowerShellGet测试(#17062)并跳过失败脚本块测试(#17093)。
仓库内测试布局可为验证以上内容提供入口:模块测试位于 test/powershell/Modules,引擎测试位于 test/powershell/engine,通用测试基础设施与 CI 模块见 test/infrastructure。
七、构建与打包:全面迁移 .NET 5 与 ESRP 签名
1. .NET 5 的渐进式迁移
7.1 的构建基线在 preview 阶段一路随 .NET 5 预览推进:preview.1 使用 .NET 5 preview.1(#12140)→ preview.2 升级到 Preview 2/3(#12250、#12353)→ preview.3 使用 preview.4 → preview.4 升级到 5.0.100-preview.5 系列 → preview.5/preview.6 持续 bump 到 5.0.100-preview.7 → rc.2 迁至 5.0-RC.2(#13780)→ GA 用 .NET 5.0 RTM(#13920)。期间同步完成:
- TargetFramework 从
netcoreapp5.0改为net5.0(#12486、#12503),并跟进net5.0-windows等平台细分;关闭netcoreapp时代对x86的限制(如Disable x86 PDB generation); ReadyToRun策略调整:preview.3 开启(#12361),preview.4 对框架依赖包关闭(#12450),debug 构建关闭 R2R(#13144);- 移除对 cmake 的依赖(7.1.6,
#16578),构建链进一步纯化。
2. 签名流水线迁移 ESRP
7.1.1 一次性完成 Windows、Linux、macOS、NuGet 与第三方组件签名向 ESRP(Enhanced Signing Request Pipeline) 的集中迁移(#13988、#14010、#14210、#14324、#14060),此后 7.1.2/7.1.3 继续修复子目录文件第三方签名、对不支持类型跳过签名校验等细节。
3. 安装包与制品矩阵
- Ubuntu 20.04:GA 前为发行脚本补充依赖与校验(
#13993、#15906); - Gentoo 初次支持(preview.2,
#11429)、Debian 10(preview.1,#11540); - macOS ARM64 打包在 7.1.6 启用(
#15768);预览版 MSIX 支持 arm64 安装(#13043);Win-ARM64 在 7.1 开发期结束「实验」标注,但稳定版仍标记 preview(见 preview.4 文档更新); - 移除 WiX 安装(7.1.6,
#16834)并重构 MSI 代码以便未来加入 WiX exe 安装器(#13139);修正 stable/preview 的 MSI 升级码与快捷方式问题(#13036、#13070、#12792); - 全局工具(Global Tool) 进入稳定发布制品:发布 global tool 包、为 global tool 生成 checksum 文件、确保稳定构建发布(
#14620、#17056、#19624); - 主包附带 SBOM(软件物料清单)(7.1.6,
#16202、#16641、#16711);Alpine/ARM SKU 随包附带开启实验特性的配置文件(#16823); - macOS PKG 逐文件签名(
#13392),Store 版 MSIX 使用 Authenticode 签名(#13330)。
4. 发布管线 yaml 化
preview.6 Create release pipeline as a yaml pipeline (#13394),将发布流水线迁入 YAML 定义;新增 release build 模板、阶段依赖与 blob 覆盖检查(#12921)、buildInfo JSON 发布纠错诊断(#16404)等大量自动化脚本,仓库根目录的 tools/ci.psm1 与 tools/releaseTools.psm1 即承载了这批 CI/发布能力。
八、7.1.1 ~ 7.1.7 服务版本维护要点
正式版之后,7.1 进入服务维护期,修复集中在安全、签名、构建稳定性三方面,同时穿插少量运行时修复:
- 7.1.1(2021-01-14):ESRP 签名全面迁移(见上);
Avoid an exception if file system does not support reparse points (#13634);AppLocker Enforce mode优先于 UMCI Audit(#14353)。 - 7.1.2(2021-02-11):.NET SDK 5.0.103;修复子文件夹文件第三方签名(
#14751);稳定版发布全局工具包。 - 7.1.3(2021-03-11):移除
Start-Process环境块 32K 字符限制(#14111)——Windows 下向子进程传递超长环境变量不再被截断;Web cmdlet-NoProxy下 URI 构造修复(#14673);PromptForCredential()将targetName作为域处理(#14504);CentOS 7 docker 镜像安装 wget(#14857)。 - 7.1.4(2021-08-12):.NET SDK 5.0.400;从
PSDesiredStateConfiguration移除 cat 文件。 - 7.1.5(2021-10-14):AppLocker 测试文件删除越权错误处理(
#15881);转录场景对Out-Default的识别更严谨(#15653);受限机禁用Add-Type、遥测不再发送云角色名、遥测互斥体失败不崩溃(#15574)。 - 7.1.6(2022-03-16):Alpine 3.12/ARM64 打包与 SBOM(见上);构建与发布镜像全面切换自建镜像(
#16801)。 - 7.1.7(2022-04-26):最终将 .NET 更新到 5.0.16 / SDK 5.0.407;修复部分模块搜索路径解析到 CWD 的问题;遥测去除节点名(
#16981);重新启用 PowerShellGet 的 PSGallery 测试(#17062)。
整体上,7.1 的服务更新严格执行了「STS 短支持期」的节奏——最后一次更新(7.1.7)距 GA 约 17 个月,此后该系列的生命周期随策略收束,用户应迁移到后续受支持版本。
九、仓库内可继续深挖的源码地图
若想验证本文所述特性在当前仓库中的真实代码形态,可按以下路径继续深入:
| 特性/主题 | 仓库源码入口 |
|---|---|
Get-Date -AsUTC/-UnixTimeSeconds |
GetDateCommand.cs 与对应测试 Get-Date.Tests.ps1 |
ForEach-Object -Parallel runspace 池 |
InternalCommands.cs(ParallelParameterSet/PSTaskPool) |
Test-Json -SchemaFile |
TestJsonCommand.cs |
子系统/Get-PSSubsystem |
engine/Subsystem(含 GetPSSubsystemCommand.cs) |
| ComInterop 修缮 | engine/ComInterop |
| 格式化输出/错误视图相关 | FormatAndOutput 与 engine/interpreter |
| CI/发布自动化 | tools/ci.psm1、tools/releaseTools.psm1 |
| 各版本纵向对照 | CHANGELOG/README.md 及 CHANGELOG 下的 7.0/7.2/7.3/… 变更日志 |
当前仓库其余版本的演进记录(7.2 及之后、当前预览版等)可继续查阅 CHANGELOG 目录下的对应文档,以了解 7.1 中那些以实验形式引入的特性(子系统、PSNativePSPathResolution 等)在后续版本中的去向。
结语
PowerShell 7.1 作为 .NET 5 之上的过渡性版本,其 changelog 清晰折射出一个成熟开源 shell 的治理节奏:功能以「实验特性」为缓冲带、破坏性变更被显式登记并配以 PR 溯源、服务版本严格聚焦签名安全与构建稳定性。对脚本作者而言,本版最重要的迁移动作是重新审视原生命令 stderr 相关的 $ErrorActionPreference/$? 语义、Start-Process 环境继承、Split-Path 与 Web cmdlet -OutFile 的参数约束;对平台工程而言,ESRP 签名与 SBOM 化则标志着 PowerShell 交付流水线的工业化。理解 7.1 的这些变迁,既能帮助你在升级旧脚本时规避兼容性陷阱,也能为读懂当前仓库后续版本的变更逻辑提供参照系。
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 StartedRust0629
MiniCPM5-2BMiniCPM5-2B 是一款面向端侧、本地部署和资源受限场景的 2B 稠密 Transformer,能够达到同尺寸开源模型 SOTA 水平。Markdown00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
HivisionIDPhotos⚡️HivisionIDPhotos: a lightweight and efficient AI ID photos tools. 一个轻量级的AI证件照制作算法。Python07
DragonOSDragonOS is an operating system developed from scratch using Rust, with Linux compatibility. It is designed for **Serverless** scenarios. 使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算Serverless场景而设计。Rust00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00