PowerShell 7.2 中的新增功能

PowerShell 7.2 是基于 .NET 6.0 构建的下一个长期服务(LTS)版本。

PowerShell 7.2 包括以下功能、更新和重大更改。

  • 适用于大多数支持的 Linux 分发版的新通用安装程序包
  • Microsoft Windows 上的更新支持
  • 2 个新的实验功能
    • 改进了本机命令参数的传递支持
    • ANSI FileInfo 颜色支持
  • 改进了 Tab 键自动补全功能
  • 包含预测性 IntelliSense 的 PSReadLine 2.1
  • 7 个实验性功能提升为主流,1 个已删除
  • 将 DSC 与 PowerShell 7 分离,以实现将来的改进
  • 提高可用性的几项重大更改

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

安装更新

检查首选操作系统的安装说明:

此外,PowerShell 7.2 还支持 ARM64 版本的 Windows 和 macOS 以及 ARM32 和 ARM64 版本的 Debian 和 Ubuntu。

有关支持的操作系统和支持生命周期的最新信息,请参阅 PowerShell 支持生命周期

适用于 Linux 分发版的新通用安装包

以前,我们为每个受支持的 CentOS、RHEL、Debian 和 Ubuntu 版本创建了单独的安装程序包。 通用安装程序包将 8 个不同的包合并为一个包,使 Linux 上的安装更简单。 通用包安装目标分发所需的依赖项,并创建特定于平台的更改以使 PowerShell 正常工作。

针对 Windows 的 Microsoft 更新支持

PowerShell 7.2 添加了对 Microsoft Update 的支持。 启用此功能时,你将在传统的 Windows 更新(WU)管理流中获取最新的 PowerShell 7 更新,无论是使用适用于企业的 Windows 更新、WSUS、SCCM 还是“设置”中的交互式 WU 对话框。

PowerShell 7.2 MSI 包包含以下命令行选项:

  • USE_MU - 此属性有两个可能的值:
    • 1 (默认值) - 选择通过 Microsoft 更新或 WSUS 进行更新
    • 0 - 不要选择通过微软更新或WSUS更新
  • ENABLE_MU
    • 1(默认)- 选择使用 Microsoft 更新、自动更新或 Windows 更新
    • 0 - 不选择使用 Microsoft 更新、自动更新或 Windows 更新

实验性功能

以下实验性功能现在是此版本中的主流功能:

  • Microsoft.PowerShell.Utility.PSImportPSDataFileSkipLimitCheck - 请参阅 Import-PowerShellDataFile
  • Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace
  • PSAnsiRendering - 请参阅 about_ANSI_Terminals
  • PSAnsiProgress - 请参阅 about_ANSI_Terminals
  • PSCultureInvariantReplaceOperator
  • PSNotApplyErrorActionToStderr
  • PSUnixFileStat

此版本中添加了以下实验性功能:

  • PSNativeCommandArgumentPassing - 启用此实验功能后,PowerShell 将使用 StartProcessInfo 对象的 ArgumentList 属性,而不是调用本机可执行文件时重建字符串的当前机制。 此功能添加了一个新的自动变量 $PSNativeCommandArgumentPassing,可用于在运行时选择行为。

  • PSAnsiRenderingFileInfo - 允许对文件信息进行 ANSI 颜色自定义。

  • PSLoadAssemblyFromNativeCode - 公开 API 以便能从本机代码加载程序集。

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

改进了 Tab 键自动补全功能

PowerShell 7.2 对 Tab 键自动补全功能进行了多项改进。 这些更改包括 bug 修复和改进可用性。

  • 修复了关于*主题的未本地化的 Tab 自动补全功能 (#15265)(感谢 @MartinGC94)
  • 修复了自动补全功能中被视为位置参数的 splatting (#14623)(感谢 @MartinGC94)
  • 为基于评论的帮助关键字添加了自动补全功能 (#15337)(感谢 @MartinGC94)
  • 为 Requires 语句添加了自动补全功能 (#14596)(感谢 @MartinGC94)
  • 为 Format-* cmdlet 的 View 参数添加了 Tab 自动补全功能 (#14513)(感谢 @iSazonov)

PSReadLine 2.1 预测性 IntelliSense

PSReadLine 2.1 引入了 CommandPrediction API,这些 API 建立了一个框架,用于为命令行完成提供预测。 API 使用户能够基于用户历史记录中的匹配预测发现、编辑和执行完整命令。

预测性 IntelliSense 默认禁用。 若要启用预测,请运行以下命令:

Set-PSReadLineOption -PredictionSource History

将 DSC 与 PowerShell 7 分离,以实现将来的改进

PSDesiredStateConfiguration 模块已从 PowerShell 7.2 包中删除,现已发布到 PowerShell 库。 这允许独立于 PowerShell 开发 PSDesiredStateConfiguration 模块,用户可以为其环境混合和匹配 PowerShell 和 PSDesiredStateConfiguration 的版本。 若要从 PowerShell 库安装 PSDesiredStateConfiguration 2.0.5,请执行以下操作:

Install-Module -Name PSDesiredStateConfiguration -Repository PSGallery -MaximumVersion 2.99

重要

请确保包含参数 MaximumVersion,或者安装 PSDesireStateConfiguration 版本 3(或更高版本),其中包含显著差异。

引擎更新

  • 添加 LoadAssemblyFromNativeMemory 函数以通过 awakecoding 拉取请求从本机 PowerShell 主机加载内存中的程序集·(#14652)

重大更改和改进

  • PSDesiredStateConfiguration 已从 PowerShell 7.2 包中删除
  • 使 PowerShell Linux deb 和 RPM 包通用(#15109)
  • 实验性功能 PSNativeCommandArgumentPassing:将 ArgumentList 用于本机可执行文件调用(#14692)
  • 确保为脚本 cmdlet 的所有输出设置了 -PipelineVariable (#12766)
  • 如果 ConvertTo-Json 超过 -Depth 值(#13692),则发出警告
  • 删除 -Directory 开关 CL-General 的别名 D (#15171)
  • 改进可变值类型的检测(#12495)
  • 在锁定状态下限制 NoLanguage 模式中的 New-Object (#14140)
  • 在执行策略绕过配置之前强制实施 AppLocker 拒绝配置 (#15035)
  • FileSystemInfo.TargetCodeProperty 更改为 AliasProperty(该属性指向 FileSystemInfo.LinkTarget)(#16165)