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-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 的 OutFile 和 InFile 参数 (#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!) - 将 Path 和 LiteralPath 参数添加到
Test-Json
cmdlet(#19042) (谢谢 @ArmaanMcleod!) - 将 NoHeader 参数添加到
ConvertTo-Csv
和Export-Csv
命令行小程序(#19108)(谢谢 @ArmaanMcleod!)) - 将 Confirm 和 WhatIf 参数添加到
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-Object
和Get-Unique
命令添加了开关参数-CaseInsensitive
(#19683),感谢 @ArmaanMcleod!) Restart-Computer
和Stop-Computer
在 Unix 上未通过 sudo 运行时应以错误失败(#19824)
引擎改进
对 $PSStyle
的更新
- 添加 Dim 和 DimOff 属性 (#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 - 将硬编码的建议框架替换为可扩展的反馈提供程序。
- 此功能还将 FeedbackName、FeedbackText和 FeedbackAction 属性添加到
$PSStyle.Formatting
,以便更改反馈消息的格式。
- 此功能还将 FeedbackName、FeedbackText和 FeedbackAction 属性添加到
- PSModuleAutoLoadSkipOfflineFiles - 模块发现现在跳过了由云提供商标记为不完全在磁盘上的文件。
- PSCommandWithArgs - 添加对将参数作为单个字符串传递给命令的支持
以下实验性功能成为主流:
- PSConstrainedAuditLogging
- PSCustomTableHeaderLabelDecoration
- PSNativeCommandErrorActionPreference
- PSNativeCommandPreserveBytePipe
- PSWindowsNativeCommandArgPassing
PowerShell 7.4 更改了以下实验功能:
- PSCommandNotFoundSuggestion - 此功能现在使用可扩展的反馈提供程序,而不是硬编码的建议(#18726)
有关实验性功能的详细信息,请参阅使用实验性功能。