PowerShell 7.4 中的新增功能

PowerShell 7.4.7 包括以下功能、更新和重大更改。 PowerShell 7.4.7 基于 .NET 8.0.12 构建。

有关更改的完整列表,请参阅 GitHub 存储库中的 CHANGELOG

中断性变更

  • Nano Server Docker 映像不适用于此版本
  • 向通用参数添加了 ProgressAction 参数
  • 更新一些 PowerShell API,以在参数为空字符串 (#19215) 时引起 ArgumentException 而不是 ArgumentNullException (#19215)(感谢 @xtqqczze!)
  • 删除与 #requires -pssnapin 相关的代码(#19320
  • Test-Json 现在使用 JsonSchema.NET 而不是 Newtonsoft.Json.Schema。
    • 通过此更改,Test-Json 不再支持较旧的 Draft 4 架构。 (#18141)(谢谢 @gregsdennis!)。 有关 JSON 架构的详细信息,请参阅 JSON 架构 文档。 这也会中断带有注释的 JSON 和 JSONC 文件的 Test-Json
    • ConvertFrom-Json 支持仍使用 Newtonsoft.Json.Schema,以便它可以使用注释转换 JSON 文件。
  • Test-Connection 的输出现在包含有关 TCP 连接测试的更多详细信息
  • .NET 引入了影响 Test-Connection的更改。 该 cmdlet 现在返回有关使用自定义缓冲区大小时需要在 Linux 平台上使用 sudo 的错误 (#20369)
  • 实验性功能 PSNativeCommandPreserveBytePipe 现已成为主流功能。 PowerShell 现在将本机命令的 stdout 流重定向到文件或将字节流数据通过管道传输到本机命令的 stdin 流时,会保留字节流数据。
  • 更改使用 RelativeBasePath 参数(#19755)时处理 Resolve-Path 的相对路径的方式(谢谢 @MartinGC94!))
  • 删除未使用的 PSv2 代码 - 删除 TabExpansion 函数(#18337

安装程序更新

Windows MSI 包现在提供了在安装过程中禁用 PowerShell 遥测的选项。 有关详细信息,请参阅 从命令行安装 msi 包。

更新了 PSResourceGet 和 PSReadLine 的版本

PowerShell 7.4 包括 Microsoft.PowerShell.PSResourceGet v1.0.1。 此模块与 PowerShellGet v2.2.5 和 PackageManagement v1.4.8.1 并排安装。 有关详细信息,请参阅 Microsoft.PowerShell.PSResourceGet的文档。

PowerShell 7.4 现在包括 PSReadLine v2.3.4。 有关详细信息,请参阅 PSReadLine的文档。

Tab 自动补全改进

非常感谢 @MartinGC94 和其他人为提升选项卡补全功能所做的所有工作。

  • 修复了使用空数组表达式(#18355) 完成脚本中的第一个命令时出现的问题
  • 修复位置参数补全功能 (#17796)
  • 确定完成位置参数时的默认参数集的优先级(#18755
  • 改进动态参数的伪绑定(#18030
  • 改进哈希表键的类型推理(#17907
  • 修复空返回语句的类型推理错误(#18351
  • 改进 Get-Random 的类型推理(#18972
  • 修复所有作用域变量的类型推理(#18758
  • 改进管道中推断类型的枚举 (#17799)
  • 在比较枚举时为比较值添加补全功能 (#17654)
  • 为枚举添加属性分配补全 (#19178)
  • 修复 PSCustomObject 变量属性的补全 (#18682)
  • 修复属性参数中的成员补全功能 (#17902)
  • 从完成结果中排除冗余参数别名(#19382
  • 修复具有基类型的类的类成员补全 (#19179)
  • 为 Using 关键字添加补全功能 (#16514)
  • 修复在补全变量时出现的 TabExpansion2 变量泄漏问题(#18763
  • 启用跨 ScriptBlock 范围补全变量 (#19819)
  • 修复 foreach 语句变量补全问题 (#19814)
  • 修复变量类型推理优先级(#18691
  • 修复 PowerShell 枚举类的成员补全问题 (#19740)
  • 修复方法调用中索引表达式中的数组文本分析问题 (#19224)
  • 改进路径补全 (#19489)
  • 修复空脚本输入的 CompleteInput 中的“索引超出边界”错误 (#19501)
  • 提高变量完成性能(#19595
  • 改进类型约束变量赋值、嵌套哈希表等的哈希表键补全问题 (#17660)
  • 将外部应用程序输出推断为字符串(#19193
  • 更新枚举的参数补全以排除 ValidateRange 属性不允许的值(#17750) (谢谢 @fflaten!))。
  • 修复动态参数完成 (#19510)
  • 为由 Data 语句分配的变量添加完成 (#19831)
  • 将 Windows 系统上的扩展波形符 (~) 修复为 $home 以防止使用本机命令中断用例 (#21529)

Web cmdlet 的改进

非常感谢 @CarloToso 和其他人员为改进 Web cmdlet 所做的所有工作。

  • 修复 Web 命令行工具中的解压功能以包括 Brotli (#17955) (感谢 @iSazonov!))
  • Webcmdlet 添加 308 以重定向代码和小型清理 (#18536)
  • 下载完成或取消时,请完成 Invoke-WebRequest 中的进度条渲染(#18130
  • 如果状态代码为 429,Web cmdlet 会从响应头获取 Retry-After 间隔 (#18717)
  • Web cmdlet 将默认字符集编码设置为 UTF8 (#18219
  • 将 WebSession.MaximumRedirection 保持不变 (#19190)
  • WebCmdlet 分析 XML 声明以获取编码值(如果存在)。 (#18748
  • 修复了在 webcmdlet 中未指定编码时使用 xml -Body 的问题(#19281
  • 在 WebCmdlet 中将 PUT 方法的行为调整为 POST 方法,以适用于默认内容类型(#19152
  • 在 WebCmdlet 中考虑来自标头的 ContentType (#19227)
  • 允许通过将 -PreserveHttpMethodOnRedirect 添加到 Web cmdlet 来保留原始 HTTP 方法(#18894
  • Webcmdlet 在 https 到 http 重定向时显示错误(#18595
  • 向 Web cmdlet 添加 AllowInsecureRedirect 开关 (#18546)
  • 改进当内容长度未知时 Web cmdlet 中的详细消息 (#19252)
  • Invoke-WebRequest 中为响应中的链接生成相对 URI (#19092
  • 修复 WebCmdlet 中 -CustomMethod POST 的重定向问题 (#19111)
  • 在 Web命令行工具中清除以前的响应 (#19117
  • 改进 Invoke-WebRequest xml 和 json 错误格式(#18837
  • 将 ValidateNotNullOrEmpty 添加到 WebCmdlet 的 OutFileInFile 参数 (#19044)
  • HttpKnownHeaderNames 更新标头列表 (#18947)
  • Invoke-RestMethod -FollowRelLink 修复包含逗号的链接(#18829
  • 修复在 Web cmdlet 中管理重定向和 KeepAuthorization 的错误(#18902
  • StatusCode 添加到 HttpResponseException#18842
  • 支持 Web Cmdlet 中的 HTTP 持久连接(#19249) (谢谢 @stevenebutler!)
  • 小型清理 Invoke-RestMethod (#19490)
  • 改进 WebCmdlet 的详细消息以显示正确的 HTTP 版本(#19616
  • FileNameStar 添加到 WebCmdlet 中的 MultipartFileContent (#19467)
  • 将 WebCmdlet 的 HTTP 状态从 409 修复为 429,以便从 Retry-After 标头获取重试间隔。 (#19622)(谢谢 @mkht!)
  • -TimeoutSec 更改为 -ConnectionTimeoutSeconds 并将 -OperationTimeoutSeconds 添加到 web cmdlet (#19558)(感谢 @stevenebutler!) 其他 cmdlet
  • 在 WebCmdlet 中读取数据而连接挂起时支持 Ctrl+C (#19330)(感谢 @stevenebutler!)
  • 支持 WebCmdlet 中的 Unix 域套接字(#19343

其他 cmdlet 改进

  • Test-Connection 现在返回有关使用自定义缓冲区大小时需要在 Linux 平台上使用 sudo 的错误 (#20369)
  • 将输出类型添加到 Format 命令(#18746) (谢谢 @MartinGC94!)
  • 添加 Get-WinEvent 的输出类型属性(#17948) (谢谢 @MartinGC94!)
  • PathLiteralPath 参数添加到 Test-Json cmdlet(#19042) (谢谢 @ArmaanMcleod!)
  • NoHeader 参数添加到 ConvertTo-CsvExport-Csv 命令行小程序(#19108)(谢谢 @ArmaanMcleod!))
  • ConfirmWhatIf 参数添加到 Stop-Transcript(#18731)(感谢 @JohnLBevan!)
  • FuzzyMinimumDistance 参数添加到 Get-Command#18261
  • 使 编码 参数能够在 PowerShell 中采用 ANSI 编码(#19298) (谢谢 @CarloToso!)
  • 将 progress 添加到 Copy-Item (#18735)
  • 现在,在非美国系统上使用隐式区域性时,Update-Help 会报告错误。 (#17780)(谢谢 @dkaszews!)
  • 创建完成的进度记录时不需要活动 (#18474)(感谢 @MartinGC94!)
  • 禁止为 Get-Content cmdlet 参数 -Head-Tail 设置负值(#19715)(谢谢 @CarloToso!))
  • 当当前区域性与语言不关联时使 Update-Help 引发适当的错误 (#19765)(感谢 @josea!)
  • 允许在 Select-Object cmdlet 中合并 -Skip-SkipLast 参数。 (#18849)(谢谢 @ArmaanMcleod!)
  • 添加 Get-SecureRandom cmdlet (#19587)
  • Set-Clipboard -AsOSC52 用于远程使用 (#18222)(感谢 @dkaszews!)
  • 加快 Resolve-Path 相对路径解析 (#19171)(感谢 @MartinGC94!)
  • Select-ObjectGet-Unique 命令添加了开关参数 -CaseInsensitive#19683),感谢 @ArmaanMcleod!)
  • Restart-ComputerStop-Computer 在 Unix 上未通过 sudo 运行时应以错误失败(#19824

引擎改进

$PSStyle 的更新

  • 添加 DimDimOff 属性 (#18653
  • PSStyle 类添加了静态方法,该类将前台和后台 ConsoleColor 值映射到 ANSI 转义序列(#17938
  • 默认情况下,计算字段的表标题采用斜体格式
  • 现在远程主机上支持采用 $PSStyle.OutputRendering (#19601)
  • 更新了遥测数据以包括使用 CrescendoBuilt 模块(#20371

其他引擎更新

  • 声明 NoRunspaceAffinity 属性时,使 PowerShell 类不与 Runspace 关联(#18138
  • 添加 ValidateNotNullOrWhiteSpace 属性(#17191) (谢谢 @wmentha!)
  • sqlcmd 添加到用于传递旧参数的列表(#18559
  • 添加函数 cd~#18308) (谢谢 @GigaScratch!)
  • 修复泛型类型中的数组类型解析(#19205) (谢谢 @MartinGC94!))
  • 修复设备路径根目录中的通配符 globbing (#19442)(感谢 @MartinGC94!)
  • 添加公共 API 以获取 PSModulePath 元素的位置(#19422
  • 修复不正确的字符串到类型转换 (#19560)(感谢 @MartinGC94!)
  • 修复在使用许多断点时执行速度缓慢的问题 (#14953)(感谢 @nohwnd!)
  • 删除与 #requires -pssnapin 相关的代码(#19320

实验特性

PowerShell 7.4 引入了以下实验性功能:

  • PSFeedbackProvider - 将硬编码的建议框架替换为可扩展的反馈提供程序。
    • 此功能还将 FeedbackNameFeedbackTextFeedbackAction 属性添加到 $PSStyle.Formatting,以便更改反馈消息的格式。
  • PSModuleAutoLoadSkipOfflineFiles - 模块发现现在跳过了由云提供商标记为不完全在磁盘上的文件。
  • PSCommandWithArgs - 添加对将参数作为单个字符串传递给命令的支持

以下实验性功能成为主流:

PowerShell 7.4 更改了以下实验功能:

有关实验性功能的详细信息,请参阅使用实验性功能