PowerShell Core 6.2 中的新增功能
PowerShell Core 6.2 版本侧重于性能改进、bug 修复以及可提高质量的较小 cmdlet 和语言增强功能。 若要查看改进的完整列表,请在 GitHub 上查看我们详细的更改日志。
实验性功能
在此之前,我们启用了对实验性功能的支持。 6\.2 版本中提供了四个要试用的实验性功能。请提供反馈,以便我们进行改进,并决定该功能是否值得提升到主流状态。
使用 Get-ExperimentalFeature
获取可用的实验性功能列表。 可以使用 Enable-ExperimentalFeature
和 Disable-ExperimentalFeature
启用或禁用这些功能。
命令未找到建议
此功能使用模糊匹配来查找可能键入错误的命令或 cmdlet 的建议。
Enable-ExperimentalFeature -Name PSCommandNotFoundSuggestion
示例
在本例中,拼写错误的 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 使用该功能分析管道,以确定该命令是否可以安全运行,以及它是否存在于目标系统中。 如果为 true,PowerShell 将远程执行整个管道,并且只将结果序列化和 de-serializes
返回给客户端。
Enable-ExperimentalFeature -Name PSImplicitRemotingBatching
在 localhost 上实际测试 Get-Process | Sort-Object
的时间从 10-15 秒减少到 20-30 毫秒。 该功能只需在客户端上启用。 不需要在服务器上进行任何更改。
临时驱动器
Enable-ExperimentalFeature -Name PSTempDrive
如果在不同操作系统上使用 PowerShell Core,会发现在 Windows、macOS 和 Linux 上用于查找临时目录的环境变量是不同的! 借助此功能,可获得一个名为 Temp:
的 PSDrive,它将自动映射到你正在使用的操作系统的临时文件夹。
示例
PS> "Hello World!" > Temp:/hello.txt
PS> Get-Content Temp:/hello.txt
Hello World!
注意,本机文件命令(如 Linux 上的 ls
)不能识别 PSDrive,因此看不到此 Temp:
驱动器。
缩写扩展
PowerShell cmdlet 应具有描述性名词。 这将导致更难键入的长名称。 该功能允许只键入 cmdlet 的大写字符,并使用 Tab 自动补全查找匹配项。
Enable-ExperimentalFeature -Name PSUseAbbreviationExpansion
示例
PS> i-arsavsf
如果按 Tab 键,并安装了 Azure PowerShell Az 模块,它将自动完成为:
PS> Import-AzRecoveryServicesAsrVaultSettingsFile
注意
此功能旨在以交互方式使用。 不能执行 cmdlet 的缩写形式。 此功能不能替代别名。
重大更改
- 修复
Write-Output
中的-NoEnumerate
行为,使之与 Windows PowerShell 一致。 (#9069) - 使
Join-String -InputObject 1,2,3
结果等于1,2,3 | Join-String
结果 (#8611) (谢谢 @sethvs!) - 添加到
-Stable
Sort-Object
和相关测试 (#7862) (谢谢 @KirkMunro!) - 改进
Start-Sleep
cmdlet 以接受秒的小数部分 (#8537) (谢谢 @Prototyyppi!) - 将 Hashtable 更改为在所有区域性中使用 OrdinalIgnoreCase 作为
case-insensitive
(#8566) - 修复 了 中的
Import-Csv
LiteralPath 以绑定到Get-ChildItem
输出 (#8277) (谢谢@iSazonov!) - 如果在 (#7899 中使用
Import-Csv
双引号分隔符,则不再跳过没有名称的列) (谢谢 @Topping!) -
Get-ExperimentalFeature
不再具有-ListAvailable
开关 (#8318) - Debug 参数现在设置为
$DebugPreference
Continue 而不是 “查询 (#8195) (谢谢” @KirkMunro!) - 如果在与 pwsh 一起使用的非交互式、重定向、编码命令中指定
-OutputFormat
,则采用该指定项 (#8115) - 在尝试从 GAC 加载程序集之前,先从模块基路径加载程序集 (#8073)
- 从 Linux 预览包中删除波形符 (#8244)
- 先移动处理
-WorkingDirectory
再处理配置文件 (#8079) - 请勿在 Unix (#7697 上添加
PATHEXT
环境变量,) (谢谢 @iSazonov!)
已知问题
- 在 Windows IOT ARM 平台上进行的远程处理存在模块加载问题。 请参阅 (#8053)
常规更新和修补程序
- 在区分大小写的文件系统上为文件和文件夹启用不区分大小写的 Tab 自动补全 (#8128)
- 使 PSVersionInfo.PSVersion 和 PSVersionInfo.PSEdition 公开 (#8054) (谢谢 @KirkMunro!)
- 在块中添加
catch{ }
的类型$_
/$PSItem
推理 (#8020) (谢谢@vexx32!) - 修复静态方法调用类型推理 (#8018) (谢谢 @SeeminglyScience!)
- Create 、
Group-Object
、PSObject 和 Hashtable (#7231 的推断类型Select-Object
) (谢谢@powercode!) - 支持使用
ByRef-like
类型参数的调用方法 (#7721) - 处理 Windows PowerShell 模块路径已在环境的 PSModulePath 中的情况 (#7727)
- 通过存储纯文本来启用适用于非 Windows 的
SecureString
cmdlet (#9199) - 使用 securestring 导入 clixml 时,改进非 Windows 上的错误消息 (#7997)
- 将参数 ReplyTo 添加到
Send-MailMessage
(#8727) (谢谢 @replicaJunction!) - 将已过时的消息添加到
Send-MailMessage
(#9178) - 修复
Restart-Computer
,以便在 WinRM 不存在时使用localhost
(#9160) - 正在托管 PowerShell 时,使
Start-Job
引发终止错误 (#9128) - 为 ushort、uint、ulong 和短文本添加 C# 样式类型快捷方式和后缀 (#7813) (谢谢 @vexx32!)
- 添加了数字文本的新后缀 - 请参阅 about_Numeric_Literals (#7901) (谢谢 @vexx32!)
- 当 SupportsShouldProcess 未设置为“true”时正确报告影响级别 (#8209) (谢谢 @vexx32!)
- 修复 Web Cmdlet 中的请求字符集问题 (#8742) (谢谢 @markekraus!)
- 修复 Web Cmdlet (#8679) (预期
100-continue
问题 谢谢 @markekraus!) - 修复了 web cmdlet (#7676 的文件阻塞问题) (谢谢 @Claustn!)
- 修复了 (#8694 中的
Invoke-RestMethod
代码页分析问题,) (谢谢 @markekraus!) - 重构
ConvertTo-Json
以将 JsonObject.ConvertToJson 公开为公共 API (#8682) - 在 中添加
ConvertFrom-Json
可配置的最大深度-Depth (#8199) (谢谢 @louistio!) - 在
ConvertTo-Json
cmdlet (#7775 中添加 EscapeHandling 参数) (谢谢 @iSazonov!) - 将
-CustomPipeName
添加到 pwsh 和Enter-PSHostProcess
(#8889) - 使用
New-Item
在 Windows 上启用创建相对符号链接 (#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!) - 解决 PAGER 的路径是否包含空格 (#8571) (谢谢 @pougetat!)
- 在“help”函数中添加
less
的使用提示,以指导用户如何退出 (#7998) - 在
Format-Hex
cmdlet (#8191 中添加支持枚举和字符类型) (谢谢 @iSazonov!) - 从
Format-Hex
中删除 ShouldProcess (#8178) - 将新的 Offset 和 Count 参数添加到
Format-Hex
cmdlet (#7877 并重构) (谢谢 @iSazonov!) - 允许将“name”作为 中
ConvertTo-Html
“label”的别名键,允许“width”条目为整数 (#8426) (谢谢 @mklement0!) - 让基于脚本块的计算属性在
ConvertTo-Html
(#8427) (再次正常工作 谢谢 @mklement0!) - 添加用于从管道输入创建文本的 cmdlet
Join-String
(#7660) (谢谢 @powercode!) - 修复
Join-String
cmdlet FormatString 参数逻辑 (#8449) (谢谢 @sethvs!) - 将
Clear-Host
更改回使用$RAWUI
并清除以进行远程操作 (#8609) - 更改
Clear-Host
以简单地调用[console]::clear
,并从 Unix 中删除清晰别名 (#8603) - 修复 了 中的
Import-Csv
LiteralPath 以绑定到Get-ChildItem
输出 (#8277) (谢谢 @iSazonov!) - help 函数不应为 AliasHelpInfo 使用寻呼程序 (#8552)
- 将
Start-Transcript
添加到-UseMinimalHeader
以最小化脚本标头 (#8402) (谢谢@lukexjeremy!) - 添加
Enable-ExperimentalFeature
和Disable-ExperimentalFeature
cmdlet (#8318) - 如果 logman.exe 可用,则公开 PSDiagnostics 中的所有 cmdlet (#8366)
- 从
New-PSDrive
non-Windows
平台 (#8291 中删除 Persist 参数) (谢谢@lukexjeremy!) - 添加对
cd +
(#7206 的支持) (谢谢 @bergmeister!) - 使
Set-Location -LiteralPath
能够使用名为 - 和 + 的文件夹 (#8089) -
Test-Path
$false
当给定空或$null
路径值 (#8080 时返回) (谢谢@vexx32!) - 允许返回动态参数,即使路径不匹配任何提供程序 (#7957)
- 在 Unix 平台上支持
Get-PSHostProcessInfo
和Enter-PSHostProcess
(#8232) - 减少 cmdlet (#8103 中的分配
Get-Content
) (谢谢 @iSazonov!) - 允许
Add-Content
在编写内容时与其他工具共享读取访问 (#8091) -
Get/Add-Content
在面向容器时引发改进的错误 (#7823) (谢谢 @kvprasoon!) - 将 、
-NoUserOverrides
和-ListAvailable
参数添加到Get-Culture
-Name
cmdlet (#7702) (谢谢@iSazonov!) - 为完成 Encoding 参数添加统一属性。 (#7732) (谢谢 @ThreeFive-O!)
- 在 编码 参数 (#7636 中允许注册代码页的数字 ID 和名称) (谢谢 @iSazonov!)
- 修复
Rename-Item -Path
通配符字符 (#7398) (谢谢 @kwkam!) - 使用
Start-Transcript
和 文件时,文件为空,而不是删除 (#8131) (谢谢 @paalbra!) - 使用
Add-Type
FileAccess.Read 和 FileShare.Read 显式创建开放源代码文件 (#7915) (谢谢@IISResetMe!) - 修复最新 Windows 的
Enter-PSSession -ContainerId
(#7883) - 请确保 NestedModules 属性由
Test-ModuleManifest
填充 (#7859) - 将大小写添加到
%F
Get-Date
-UFormat (#7630) (谢谢 @britishben!) - 修复
Set-Service -Status Stopped
了 停止具有依赖项的服务 (#5525) (谢谢 @zhenggu!)