PowerShell 7.3 中的新增功能

PowerShell 7.3 是基于 .NET 7.0 构建的下一个稳定版本。

PowerShell 7.3 包括以下功能、更新和中断性变更。

重大更改和改进

  • 已在此版本中更新或删除 Windows API 以实现合规性,这表示 PowerShell 7.3 不在 Windows 7 上运行。 虽然不再支持 Windows 7,但以前的版本可以在 Windows 7 上运行。
  • 适用于 Hyper-V 的 PowerShell Direct 仅在 Windows 10 版本 1809 及更高版本上受支持。
  • 由于 .NET 7 中有意的中断性变更,导致 Test-Connection 中断。 它由 #17018 跟踪
  • clean 块作为 beginprocessend 的对等项添加到脚本块,以便轻松清理资源 (#15177)
  • $PSStyle.OutputRendering 的默认值更改为“Host”
  • 使 Out-StringOut-File 保持字符串输入不变 (#17455)
  • 将 System.Security.AccessControl.ObjectSecurity 的类型数据定义移至 Microsoft.PowerShell.Security 模块 (#16355)(感谢 @iSazonov!)
    • 在此更改之前,用户无需显式导入 Microsoft.PowerShell.Security 模块,即可使用为 System.Security.AccessControl.ObjectSecurity 实例定义的代码属性。
    • 在此更改之后,用户需要显式导入 Microsoft.PowerShell.Security 模块,才能使用这些代码属性和代码方法。

Tab 自动补全改进

  • PowerShell 7.3 包括默认启用预测性 IntelliSense 的 PSReadline 2.2.6。 有关详细信息,请参阅 about_PSReadLine
  • 修复了为 ValidateScriptAttribute 指定的脚本块中的 Tab 自动补全。 (#14550)(感谢 @MartinGC94!)
  • break/continue 后为循环标签添加了 Tab 自动补全 (#16438)(感谢 @MartinGC94!)
  • 在多个方案中改进哈希表自动补全 (#16498)(感谢 @MartinGC94!)
    • 参数展开
    • Invoke-CimMethod 的 Arguments 参数
    • Get-WinEvent 的 FilterHashtable 参数
    • CIM cmdlet 的 Property 参数
    • 从成员完成方案中删除重复项
  • 在网络共享(UNC 路径)自动补全中支持正斜杠 (#17111)(感谢 @sba923!)
  • 改进了成员自动补全 (#16504)(感谢 @MartinGC94!)
  • 为参数优先考虑 ValidateSet 自动补全,而不是枚举 (#15257)(感谢 @MartinGC94!)
  • 为具有类型参数的泛型方法添加了类型推理支持 (#16951)(感谢 @MartinGC94!)
  • 改进了类型推理和自动补全 (#16963)(感谢 @MartinGC94!)
    • 允许在 ForEach-Object -MemberName 的完成结果中显示方法
    • 阻止了返回 void 的表达式的完成(如 ([void](""))
    • 允许非默认类构造函数在类完成基于 AST 时显示
  • 改进了 $_ 的类型推理 (#17716)(感谢 @MartinGC94!)
  • 修复了 ICollection 的类型推理 (#17752)(感谢 @MartinGC94!)
  • 自动补全变量时防止大括号被移除 (#17751)(感谢 @MartinGC94!)
  • 为字典的索引表达式添加了自动补全 (#17619)(感谢 @MartinGC94!)
  • 修复了属性令牌的类型自动补全 (#17484)(感谢 @MartinGC94!)
  • 改进了动态参数 Tab 自动补全 (#17661)(感谢 @MartinGC94!)
  • 避免在值前自动补全参数时绑定位置参数 (#17693)(感谢 @MartinGC94!)

改进了错误处理

  • 为具有重定向的命令表达式正确设置了 $? (#16046)
  • 修复了使用 $PSNativeCommandUseErrorActionPreference 时的强制转换错误 (#15993)
  • 使本机命令错误处理可以选择性遵守 ErrorActionPreference (#15897)
  • 将可执行文件路径指定为非零退出代码 ErrorRecord 的 TargetObject (#16108)(感谢 @rkeithhill!)

会话和远程处理改进

  • -Options 添加到 PSRP over SSH 命令,以允许直接传递 OpenSSH 选项 (#12802)(感谢 @BrannenGH!)
  • -ConfigurationFile 参数添加到 pwsh 以允许使用 .pssc 文件中定义的会话配置启动新进程 (#17447)
  • 添加对在非 Windows 平台上使用 New-PSSessionConfigurationFile 的支持 (#17447)

已更新的 cmdlet

  • -HttpVersion 参数添加到 Web cmdlet 中 (#15853)(感谢 @hayhay27!)
  • 为 Web cmdlet 添加对开放式输入标记的支持 (#16193)(感谢 @farmerau!)
  • 修复了 ConvertTo-Json -Depth 以允许最多 100 个 (#16197)(感谢 @KevRitchie!)@rkeithhill!)
  • 在使用 $using: 表达式调用 Invoke-Command 时改进变量处理 (#16113)(感谢 @dwtaber!)
  • -StrictMode 添加到 Invoke-Command,以允许在本地调用命令时指定严格模式 (#16545)(感谢 @Thomas-Yu!)
  • clean 块作为 beginprocessend 的对等项添加到脚本块,以便轻松清理资源 (#15177)
  • -Amended 开关添加到 Get-CimClass cmdlet (#17477)(感谢 @iSazonov)
  • 已将 ConvertFrom-Json -AsHashtable 更改为使用有序哈希表 (#17405)
  • 在发送到 Out-GridView 之前,删除了字符串中的 ANSI 转义序列 (#17664)
  • New-TimeSpan 添加了 Milliseconds 参数 (#17621)(感谢 @NoMoreFood!)
  • 显示方法定义和重载时显示可选参数 (#13799)(感谢 @eugenesmlv!)
  • 即使当前工作目录不复存在,仍允许执行命令 (#17579)
  • 通过 Set-AuthenticodeSignature -TimeStampServer 添加对 HTTPS 的支持 (#16134)(感谢 @Ryan-Hutchison-USAF!)
  • 使用当前区域性在表中呈现十进制数 (#17650)
  • 为 OrderedDictionary 添加有序类型加速器 (#17804)(感谢 @fflaten!)
  • find.exe 添加到 Windows 的旧参数绑定行为 (#17715)
  • -noprofileloadtime 开关添加到 pwsh (#17535)(感谢 @rkeithhill!)

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

实验性功能

在 PowerShell 7.3 中,以下实验性功能成为主流:

  • PSAnsiRenderingFileInfo - 此功能添加 $PSStyle.FileInfo 成员,并启用特定文件类型的着色。

  • PSCleanBlock - 将 clean 块作为 beginprocessend 的对等项添加到脚本块,以便轻松清理资源。

  • PSAMSIMethodInvocationLogging - 扩展发送到 AMSI 以供检查的数据,以包括对 .NET 方法成员的所有调用。

  • PSNativeCommandArgumentPassing - PowerShell 现在使用 StartProcessInfo 对象的 ArgumentList 属性,而不是在调用本机可执行文件时重建字符串的旧机制。

    PowerShell 7.3.1 将 sqlcmd.exe 添加到 Windows 中使用 Legacy 参数传递样式的本机命令列表。

  • PSExec - 添加新的 Switch-Process cmdlet(别名 exec),为非 Windows 系统提供 exec 兼容性。

    PowerShell 7.3.1 将 exec 别名更改为包装 Switch-Process 的函数。 利用该函数,将参数传递给可能错误地绑定到 WithCommand 参数的本机命令。

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

PowerShell 7.3 删除了以下实验性功能:

  • 不再支持 PSNativePSPathResolution 实验性功能。
  • 不再支持 PSStrictModeAssignment 实验性功能。

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