PowerShell Core 6.2 的新内容

PowerShell Core 6.2 版本侧重于性能提升、修复错误,以及提升质量的小型命令和语言增强。 想查看完整的改进列表,请访问我们在GitHub 上的详细更新日志

实验特性

之前,我们启用了对 实验性功能的支持。 在6.2版本中,我们有四个实验性功能可供试用。请提供反馈,以便我们改进并决定该功能是否值得推广为主流。

用来 Get-ExperimentalFeature 获取可用的实验性功能列表。 你可以用和 Enable-ExperimentalFeatureDisable-ExperimentalFeature来启用或禁用这些功能。

命令未找到建议

该功能利用模糊匹配来寻找你可能输入错误的命令或命令小工具的建议。

Enable-ExperimentalFeature -Name PSCommandNotFoundSuggestion

Example

在这个例子中,拼写错误的指令子(cmdlet)名称与从最可能到最不可能的多个建议进行了模糊匹配。

Get-Commnd
Get-Commnd : The term 'Get-Commnd' is not recognized as the name of a cmdlet, function, script file,
or operable program. Check the spelling of the name, or if a path was included, verify that the path
is correct and try again.
At line:1 char:1
+ Get-Commnd
+ ~~~~~~~~~~
+ CategoryInfo          : ObjectNotFound: (Get-Commnd:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException


Suggestion [4,General]: The most similar commands are: Get-Command, Get-Content, Get-Job, Get-Module,
Get-Event, Get-Host, Get-Member, Get-Item, Set-Content.

隐式远程批处理

在管道中使用 隐式远程 时,PowerShell 会独立处理管道中的每个命令。 对象在流水线执行过程中会反复序列化,并在 de-serialized 客户端与远程系统之间进行。

通过此功能,PowerShell 分析流水线,判断命令是否安全可运行,且该命令是否存在于目标系统中。 如果成立,PowerShell 会远程执行整个流水线,只序列化并将 de-serializes 结果回传给客户端。

Enable-ExperimentalFeature -Name PSImplicitRemotingBatching

在本地主机上进行的实际测试 Get-Process | Sort-Object 时间从10-15秒减少到20-30 毫秒。 该功能只需在客户端上启用即可。 服务器不需要更改。

临时驱动

Enable-ExperimentalFeature -Name PSTempDrive

如果你在不同作系统上使用 PowerShell Core,你会发现 Windows、macOS 和 Linux 上查找临时目录的环境变量是不同的! 通过这个功能,你会得到一个调用Temp:PSDrive,它会自动映射到你所用作系统的临时文件夹。

Example

PS> "Hello World!" > Temp:/hello.txt
PS> Get-Content Temp:/hello.txt
Hello World!

请注意,原生文件命令(比如 ls Linux上的)不支持PSDrives,也不会看到这个 Temp: 硬盘。

缩写扩展

PowerShell cmdlet 通常需要包含描述性名词。 这导致名字较长,更难打字。 这个功能让你只需输入命令小词的大写字符,然后用制表表补全查找匹配。

Enable-ExperimentalFeature -Name PSUseAbbreviationExpansion

Example

PS> i-arsavsf

如果你按Tab键,并且安装了Azure PowerShell Az 模块,它会自动补全到:

PS> Import-AzRecoveryServicesAsrVaultSettingsFile

注释

此功能旨在交互式使用。 指令小工具的简化形式无法执行。 此功能不能替代别名。

重大更改

  • 修复 -NoEnumerate 行为 Write-Output 以符合Windows PowerShell。 (#9069)
  • Join-String -InputObject 1,2,3 结果等于 1,2,3 | Join-String 结果(#8611)(谢谢) @sethvs!)
  • 添加 -StableSort-Object 相关测试(#7862)(谢谢) @KirkMunro!)
  • 改进 Start-Sleep cmdlet 以支持分数秒(#8537)(谢谢) @Prototyyppi!)
  • 将哈希表改为使用 OrdinalIgnoreCase,使所有文化中都出现 case-insensitive (#8566)
  • 修复 LiteralPathImport-Csv 绑定输出 Get-ChildItem (#8277)(谢谢) @iSazonov!)
  • 如果在 Import-Csv (#7899)中使用双引号分隔符,则不再跳过无名列(谢谢) @Topping!)
  • Get-ExperimentalFeatureSwitch(#8318)已不再存在-ListAvailable
  • 调试参数现在设置为$DebugPreference继续而非询问(#8195)(谢谢)@KirkMunro!)
  • 如果在非交互式、重定向、编码命令中使用pwsh(#8115)时指定,则为Honor -OutputFormat
  • 在尝试从GAC加载前,先从模块基座路径加载组件(#8073)
  • 从 Linux 预览包中移除 tilde (#8244)
  • 在配置文件处理前的处理( -WorkingDirectory #8079)
  • 不要在Unix上添加 PATHEXT 环境变量(#7697)(谢谢) @iSazonov!)

已知问题

  • 在Windows IOT ARM平台上远程访问模块加载时存在问题。 参见(#8053)

一般更新与修复

  • 在大小写区分文件系统(#8128)中,启用大小写不区分标签的完成功能,适用于文件和文件夹
  • 将PSVersionInfo.PSVersion和PSVersionInfo.PSEdition设置为公开(#8054)(谢谢) @KirkMunro!)
  • 添加类型推断 in $_ / $PSItemcatch{ } blocks(#8020)(谢谢) @vexx32!)
  • 修正静态方法调用类型推理(#8018)(谢谢) @SeeminglyScience!)
  • 为 、 Group-Object、 PSObjectHashtable (#7231) 创建推断类型 Select-Object(谢谢)@powercode!)
  • 支持带有类型 ByRef-like 参数的调用方法(#7721)
  • 处理 Windows PowerShell 模块路径已经在环境的 PSModulePath (#7727) 中的情况
  • 通过存储纯文本(#9199)启用 SecureString 非Windows的cmdlet。
  • 在导入带有securestring的clixml时,改进非Windows的错误信息(#7997)
  • 将参数 ReplyTo 添加到 Send-MailMessage (#8727)(谢谢) @replicaJunction!)
  • 将过时消息添加到 Send-MailMessage (#9178)
  • Restart-Computer当 WinRM 不存在时修复localhost(#9160)
  • 当PowerShell被托管时,会触发 Start-Job 抛弃终止错误(#9128)
  • 为 ushort、uint、ulong 和 short 字面量添加 C# 风格的加速器和后缀(#7813)(谢谢) @vexx32!)
  • 新增数字文字后缀——参见 about_Numeric_Literals (#7901)(谢谢) @vexx32!)
  • 当SupportsShouldProcess 未设置为“true”时,正确报告影响水平(#8209)(谢谢) @vexx32!)
  • 修复网页命令中的请求字符集问题(#8742)(谢谢) @markekraus!)
  • 修复网页指令(#8679)中的预期 100-continue 问题(谢谢) @markekraus!)
  • 修复网页命令(#7676)文件阻塞问题(谢谢) @Claustn!)
  • 修复(#8694)中的 Invoke-RestMethod 代码页解析问题(谢谢) @markekraus!)
  • Refactor ConvertTo-Json to expose JsonObject.ConvertToJson as a public API (#8682)
  • 用 -Depth(#8199)添加可配置的最大深度 ConvertFrom-Json (谢谢) @louistio!)
  • 在cmdlet(#7775)中添加EscapeHandle参数 ConvertTo-Json (谢谢) @iSazonov!)
  • 加入 -CustomPipeName pwsh和 Enter-PSHostProcess (#8889)
  • 启用在Windows上创建相对符号链接,使用 New-Item (#8783)
  • 允许Windows开发者模式用户创建无升高的符号链接(#8534)
  • 启用 Write-Information 接受 $null (#8774)
  • MAML帮助内容中的高级函数修复 Get-Help (#8353)
  • 修复 Get-Help 仅声明一个参数(#8754)时 -Parameter PSTypeName的问题(谢谢) @pougetat!)
  • ScriptBlock 执行的令牌计算修复 Get-Help ,用于评论帮助。 (#8238)(谢谢 @hubuk!)
  • 更改 Get-Help cmdlet -Parameter 参数,使其接受字符串数组(#8454)(谢谢) @sethvs!)
  • 如果寻呼机的路径包含空格(#8571)(谢谢) @pougetat!)
  • 在“帮助”功能中使用提示 less 词,指导用户如何退出(#7998)
  • 在cmdlet(#8191)中添加支持枚举和字符类型 Format-Hex (谢谢) @iSazonov!)
  • 从 (#8178) 移除 ShouldProcess Format-Hex
  • 给 cmdlet (#7877) 添加新的 Offset 和 Count 参数 Format-Hex 并重构(谢谢) @iSazonov!)
  • 允许“name”作为“label” ConvertTo-Html的别名键,允许“width”条目为整数(#8426)(谢谢) @mklement0!)
  • 让基于脚本块的计算属性在(#8427)中重新 ConvertTo-Html 工作(谢谢) @mklement0!)
  • 添加从管道输入创建文本的 cmdlet Join-String (#7660)(谢谢) @powercode!)
  • 修复 Join-String cmdlet FormatString 参数逻辑(#8449)(谢谢) @sethvs!)
  • Clear-Host 回使用和 $RAWUI 清除工作,而不是远程连接(#8609)
  • Clear-Host 为简单调用 [console]::clear 并移除Unix中的清晰别名(#8603)
  • 修复 LiteralPath Import-Csv 绑定输出 Get-ChildItem (#8277)(谢谢) @iSazonov!)
  • 帮助功能不应该使用寻呼器来处理 AliasHelpInfo(#8552)
  • 添加 -UseMinimalHeaderStart-Transcript 最小化转录头(#8402)(谢谢) @lukexjeremy!)
  • 加法 Enable-ExperimentalFeatureDisable-ExperimentalFeature 指令点(#8318)
  • 如果有 PSDiagnostics 的所有 cmdlet,请 logman.exe (#8366)
  • 移除平台上non-Windows持久化参数New-PSDrive(#8291)(谢谢)@lukexjeremy!)
  • 添加支持( cd + #7206)(谢谢) @bergmeister!)
  • 启用 Set-Location -LiteralPath 名为 - 和 + 的文件夹(#8089)
  • Test-Path当给定空值或$null路径值时返回$false(#8080)(感谢)@vexx32!)
  • 即使路径与任何提供者不匹配,也允许返回动态参数(#7957)
  • 支持 Get-PSHostProcessInfoEnter-PSHostProcess Unix 平台(#8232)
  • 减少指令符中的 Get-Content 分配(#8103)(谢谢) @iSazonov!)
  • 在写作内容时启用 Add-Content 与其他工具共享阅读权限(#8091)
  • Get/Add-Content 瞄准容器时的误差减少(#7823)(谢谢) @kvprasoon!)
  • 在cmdlet(#7702)中添加 -Name-NoUserOverrides-ListAvailable 参数( Get-Culture 谢谢) @iSazonov!)
  • 编码 参数添加统一属性以完成。 (#7732)(谢谢 @ThreeFive-O!)
  • 允许在 编码 参数(#7636)中输入数字ID和注册码页名称(谢谢) @iSazonov!)
  • 用万能字符(#7398)修复 Rename-Item -Path (谢谢) @kwkam!)
  • 当存在 Start-Transcript 和 文件时,使用空文件而不是删除(#8131)(谢谢) @paalbra!)
  • FileAccess.ReadFileShare.Read明确创建Add-Type开源文件(#7915)(谢谢)@IISResetMe!)
  • 最新Windows修复( Enter-PSSession -ContainerId #7883)
  • 确保 NestedModules 属性被 Test-ModuleManifest (#7859) 填充
  • 给 -UFormat 加 %F 箱( Get-Date #7630)(谢谢) @britishben!)
  • Set-Service -Status Stopped修复有依赖的服务停止(#5525)(谢谢)@zhenggu!)