2020年11月11日 ,我们宣布 PowerShell 7.1正式发布。 在PowerShell 7.0奠定的基础上,我们的工作重点关注社区问题,并包括多项改进和修复。 我们致力于确保PowerShell保持稳定和高性能的平台。
PowerShell 7.1 包含以下功能、更新和重大变更。
- PSReadLine 2.1.0,包含预测性IntelliSense。
- PowerShell 7.1 已发布至 Microsoft Store
- 安装包已更新为支持ARM64的新作系统版本
- 4个新的实验性功能和2个实验性功能被提升为主流
- 若干破坏性改进以提升可用性
有关更改的完整列表,请参阅 GitHub 存储库中的 CHANGELOG。
PSReadLine 2.1.0
PowerShell 7.1 还包含 PSReadLine 2.1.0。 该版本包含预测智能感知(Predictive IntelliSense)。 有关预测性IntelliSense功能的更多信息,请参阅PowerShell博客中的 公告 。
Microsoft Store 安装包
PowerShell 7.1 已发布至 Microsoft Store。 你可以在 Microsoft Store 官网或 Windows 的 Store 应用中找到 PowerShell 版本。
Microsoft Store 包的权益:
- 直接内置于 Windows 的自动更新
- 可与其他软件分发机制如 Intune 和 SCCM 集成
注释
存储在 中 $PSHOME 的任何系统级配置设置都无法修改。 其中包括 WSMAN 配置。 这可以防止远程会话连接到 PowerShell 的基于应用商店的安装。 支持用户级配置和 SSH 远程处理。
其他安装商
有关支持作系统和支持生命周期的更多 up-to信息,请参见 PowerShell支持生命周期。
请查看您偏好作系统的安装说明:
此外,PowerShell 7.1 支持 Debian、Ubuntu 和 ARM64 的 ARM32 和 ARM64 版本 Alpine Linux。
虽然没有官方支持,但社区也提供了 Arch 和 Kali Linux 的软件包。
注释
Debian 10+、CentOS 8+、Ubuntu 20.04、Alpine 和 Arm 目前不支持 WinRM 远程处理。 关于如何设置基于SSH的远程访问,请参见 PowerShell Remoting over SSH。
实验特性
有关实验性功能的详细信息,请参阅使用实验性功能。
以下实验性功能现已成为本版本的主流内容:
本次发布中增加了以下实验性功能:
Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace
- PowerShell 7.1 扩展了这一实验性功能,为所有
*-PSBreakpointcmdlet 添加了 Runspace 参数。 Runspace 参数指定一个 Runspace 对象,用于与指定 runspace 中的断点交互。
- PowerShell 7.1 扩展了这一实验性功能,为所有
PSNativePSPathResolution - 该功能允许你将PowerShell提供者路径传递给不支持PowerShell路径语法的本地命令。
PSCultureInvariantReplaceOperator - 当运算符语句中的
-replace左侧作数不是字符串时,该作数会被转换为字符串。 启用该功能后,转换时字符串转换不会使用文化设置。PSSubsystemPluginModel 为未来预测性IntelliSense插件的支持奠定了基础。
突破性变更与改进
.NET 5.0 中字符串比较行为的更改
PowerShell 7.1 基于 .NET 5.0 构建,该版本引入了以下重大变更:
自 .NET 5.0 起,文化不变字符串比较忽略非打印控制字符。
例如,以下两条字符串被认为是相同的:
# Escape sequence "`a" is Ctrl-G or [char]7 'Food' -eq "Foo`ad"True修复
$?修复,当本地命令写入(stderr#13395)时不会被写入$false本地命令写入
stderr时常常不打算指示失败。 此更改$?仅在原生命令也有非零退出码时才设置为$false。 这一变化与实验特征PSNotApplyErrorActionToStderr无关。不要
$ErrorActionPreference影响stderr本地命令的输出(#13361)本地命令写入
stderr时常常不打算指示失败。 通过这一变化,stderr输出仍然被 ErrorRecord 对象捕获,但如果 ErrorRecord 来自本地命令,运行时不再适用$ErrorActionPreference。将重命名
-FromUnixTime为-UnixTimeSecondsonGet-Date,以便输入Unix时间(#13084)(谢谢) @aetos382!)该
-FromUnixTime参数是在7.1-preview.2期间添加的。 参数被重新命名以更好地匹配数据类型。 该参数取一个整数值,自1970年1月1日0:00:00起,以秒为单位。该示例将Unix时间(以1970-01-01 0:00:00以来的秒数表示)转换为DateTime。
Get-Date -UnixTimeSeconds 1577836800 Wednesday, January 01, 2020 12:00:00 AM允许明确指定的命名参数取代哈希表 splatting 中的相同参数(#13162)
通过这一变化,splatting中命名的参数被移至参数列表末尾,使其在所有显式指定命名参数绑定后才被绑定。 对于简单函数的参数绑定,当找不到指定命名参数时不会报错。 未知命名参数绑定于
$args简单函数的参数。 将 splatting 移到参数列表末尾会改变参数出现$args的顺序。例如:
function SimpleTest { param( $Name, $Path ) "Name: $Name; Path: $Path; Args: $args" }在之前的行为中, MyPath 不被绑定于 ,
-Path因为它是参数列表中的第三个参数。 ## 所以它最终被塞进了“$args”里,和Blah = "World"PS> $hash = @{ Name = "Hello"; Blah = "World" } PS> SimpleTest @hash "MyPath" Name: Hello; Path: ; Args: -Blah: World MyPath通过这一变化,来自
@hash的参数被移到了参数列表的末尾。 MyPath 成为列表中的第一个参数,因此它被绑定于-Path。PS> SimpleTest @hash "MyPath" Name: Hello; Path: MyPath; Args: -Blah: World将开关参数
-Qualifier设置为非位置性Split-Path(#12960)(谢谢) @yecril71pl!)将工作目录解析为未指定时的字面路径
Start-Process(#11946)(谢谢) @NoMoreFood!)让
-OutFile网页 cmdlet 中的参数像 (#11701) 一样工作-LiteralPath(谢谢)@iSazonov!)修复数值文字字符串参数绑定
BigInteger(#11634)(谢谢) @vexx32!)在 Windows 上,
Start-Process创建一个包含当前会话中所有环境变量的进程环境,使用-UseNewEnvironment创建新的默认进程环境(#10830)(谢谢) @iSazonov!)当将a
ScriptBlock转换为代理时,不要包裹返回结果PSObject(#10619)当a
ScriptBlock被转换为C#上下文中使用的代理类型时,用aPSObject包裹结果会带来不必要的麻烦:- 当值转换为代理返回类型时,基本上
PSObject会被展开。 所以这PSObject其实没必要。 - 当代理返回类型为
object时,它会被 包裹在 aPSObject里,这让在 C# 代码中作起来很困难。
在这一变化之后,返回的对象就是底层对象。
- 当值转换为代理返回类型时,基本上