PowerShell 7.2 中的新增功能

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

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

  • 适用于大多数受支持的 Linux 发行版的新通用安装程序包
  • Windows 上的 Microsoft 更新支持
  • 新增了 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 版本创建了单独的安装程序包。 通用安装程序包将八个不同的包合并为一个,从而简化了在 Linux 上的安装过程。 通用包安装目标发行版所需的依赖项,并创建平台特定的更改以使 PowerShell 正常工作。

针对 Windows 的 Microsoft 更新支持

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

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

  • USE_MU - 该属性有两个可能值:
    • 1(默认)- 选择通过 Microsoft 更新或 WSUS 进行更新
    • 0 - 不选择通过 Microsoft 更新或 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 使用户能够基于用户历史记录中的匹配预测来发现、编辑和执行完整命令。

预测性 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.Target 从 CodeProperty 更改为指向 FileSystemInfo.LinkTarget 的 AliasProperty (#16165)