- 引擎/语言更改Engine/language changes
- 不要将换行符插入到输出(表除外)#5193Don't insert line breaks to output (except for tables) #5193
- 更改 $OutputEncoding 以使用 UTF-8 NoBOM 编码,而不使用 ASCII #5369Change $OutputEncoding to use UTF-8 NoBOM encoding rather than ASCII #5369
- -Verbose 和 -Debug 不再替代 $ErrorActionPreference #5113-Verbose and -Debug no longer overrides $ErrorActionPreference #5113
- 在没有返回任何数据时,Invoke-RestMethod 不返回有用的信息。Invoke-RestMethod doesn't return useful info when no data is returned. #5320#5320
- 从 -Service cmdlet 中删除 -ComputerName #5090Remove -ComputerName from -Service cmdlets #5090
- 当类型信息以 CSV 显示时,Import-Csv 应在导入时应用 PSTypeNames #5134Import-Csv should apply PSTypeNames upon import when type information is present in the CSV #5134
- 通过未加密的连接发送 -Credential 时,Web Cmdlet 应发出警告 #5112Web Cmdlets should warn when -Credential is sent over unencrypted connections #5112
- 删除 AddTypeCommandBase 类 #5407Remove AddTypeCommandBase class #5407
- 为空和 null -UFormat 参数添加更好的错误消息 #5055Add better error message for empty and null -UFormat parameter #5055
- 已删除 RunspaceConfiguration 支持 #4942Removed RunspaceConfiguration support #4942
- 从 Get-Help 中删除不受支持的 -showwindow 开关 #4903Remove unsupported -showwindow switch from Get-Help #4903
- 将 $IsOSX 重命名为 $IsMacOS #4700Rename $IsOSX to $IsMacOS #4700
- 从 Diagnostics 模块删除 LocalAccount 和 cmdlet。Removal of LocalAccount and cmdlets from Diagnostics modules. #4302 #4303#4302 #4303
- 从 $PSVersionTable 删除 ClrVersion 属性 #4027Remove ClrVersion property from $PSVersionTable #4027
- 实现 Unicode 转义分析 #3958Implement Unicode escape parsing #3958
- 防止 Get-ChildItem 递归到符号链接中 (#1875)。Prevent Get-ChildItem from recursing into symlinks (#1875). #3780#3780
- 使用 C# 实现 Format-Hex #3320Implement Format-Hex in C# #3320
- Get-ComputerInfo 属性名中的拼写错误修复 #3167Typo fix in Get-ComputerInfo property name #3167
- 在传递 $null 返回所有对象而不是错误时在 Get- cmdlet 上添加验证 #2672Add validation on Get- cmdlets where passing $null returns all objects instead of error #2672
- PS 函数中 ValueFromRemainingArguments 的参数绑定问题 #2035Parameter binding problem with ValueFromRemainingArguments in PS functions #2035
- 对 Web Cmdlet 的更改Changes to Web Cmdlets
PowerShell 6.0 的重大更改Breaking Changes for PowerShell 6.0
PowerShell 工作流PowerShell Workflow
由于缺少对 .NET Core 中的 Windows Workflow Foundation 的支持,我们将不继续在 PowerShell Core 中支持 PowerShell 工作流。
将来,我们希望使用 PowerShell 语言启用本机并行/并发,而无需使用 PowerShell 工作流。
自定义管理单元Custom snap-ins
PowerShell 管理单元是 PowerShell 社区中未广泛采用的 PowerShell 模块的前身。
鉴于支持管理单元的复杂性及其缺乏在社区中的使用,我们不再支持 PowerShell Core 中的自定义管理单元。
现在,这将中断 Windows 和 Windows Server 中的 和 DnsClient
模块。
WMI v1 cmdletWMI v1 cmdlets
鉴于支持两个基于 WMI 的模块集的复杂性,我们从 PowerShell Core 中删除 WMI v1 cmdlet:
Get-WmiObject
Invoke-WmiMethod
Register-WmiEvent
Set-WmiInstance
我们转为建议使用 CIM(也称为 WMI v2)cmdlet,它们提供了与新功能及经过重新设计的语法相同的功能:Get-CimAssociatedInstance
Get-CimClass
Get-CimInstance
Get-CimSession
Invoke-CimMethod
New-CimInstance
New-CimSession
Register-CimIndicationEvent
Remove-CimInstance
Remove-CimSession
Set-CimInstance
Microsoft.PowerShell.LocalAccountsMicrosoft.PowerShell.LocalAccounts
由于使用了不受支持的 API 而从 PowerShell Core 中删除 Microsoft.PowerShell.LocalAccounts
,直至找到更佳解决方案。
-Counter cmdlet-Counter cmdlets
由于使用了不受支持的 API 而从 PowerShell Core 中删除 *-Counter
,直至找到更佳解决方案。
-EventLog cmdlet-EventLog cmdlets
由于使用了不受支持的 API 而从 PowerShell Core 中了删除 *-EventLog
。直到找到更佳解决方案。Get-WinEvent
和 Create-WinEvent
可用于在 Windows 上获取和创建事件。
将 powershell.exe 重命名为 pwsh.exe #5101Rename powershell.exe to pwsh.exe #5101
为了向用户提供在 Windows 上调用 PowerShell Core(而不是 Windows PowerShell)的确定方法,PowerShell Core 二进制文件在 Windows 上已更改为 pwsh.exe
,在非 Windows 平台上已更改为 pwsh
。
缩短的名称也与非 Windows 平台上 shell 的命名一致。
不要将换行符插入到输出(表除外)#5193Don't insert line breaks to output (except for tables) #5193
以前,输出与控制台的宽度对齐,并且在控制台的端宽度添加换行符,这意味着如果重新设置终端的大小,输出不会按预期重格式化。这一更改不适用于表格,因为换行符是保持列对齐所必需的。
对具有值类型元素类型的集合,跳过 null 元素检查 #5432Skip null-element check for collections with a value-type element type #5432
对于 Mandatory
参数及 ValidateNotNull
和 ValidateNotNullOrEmpty
属性,如果集合的元素类型是值类型,则跳过 null 元素检查。
更改 $OutputEncoding 以使用 UTF-8 NoBOM 编码,而不使用 ASCII #5369Change $OutputEncoding to use UTF-8 NoBOM encoding rather than ASCII #5369
以前的编码 ASCII(7 位)在某些情况下会导致输出的错误更改。此更改将使 UTF-8 NoBOM
成为默认设置,从而保留具有大多数工具和操作系统支持的编码的 Unicode 输出。
从大多数默认别名中删除 AllScope #5268Remove AllScope from most default aliases #5268
为了加快作用域创建,从大多数默认别名中删除了 AllScope
。保留 AllScope
供查找速度更快的几个常用别名使用。
-Verbose 和 -Debug 不再替代 $ErrorActionPreference #5113-Verbose and -Debug no longer overrides $ErrorActionPreference #5113
在没有返回任何数据时,Invoke-RestMethod 不返回有用的信息。Invoke-RestMethod doesn't return useful info when no data is returned. #5320#5320
当 API 仅返回 null
时,Invoke-RestMethod 将其序列化为字符串 "null"
,而不是 $null
。此项更改修复了 Invoke-RestMethod
中的逻辑,以便将有效的单个值 JSON null
文本正确序列化为 $null
。
从 -Computer cmdlet 中删除 -ComputerName #5277Remove -ComputerName from -Computer cmdlets #5277
由于 CoreFX 中的 RPC 远程处理出现问题(特别是在非 Windows 平台上)以及为确保在 PowerShell 中获得一致的远程处理体验,已将 -ComputerName
参数从 *-Computer
cmdlet 中删除。改为使用 Invoke-Command
作为远程执行 cmdlet 的方法。
从 -Service cmdlet 中删除 -ComputerName #5090Remove -ComputerName from -Service cmdlets #5090
为了鼓励一致地使用 PSRP,已将 -ComputerName
参数从 *-Service
cmdlet 中删除。
以前,给定通配符的 -LiteralPath
将其视为与 -Path
相同,如果该通配符未找到任何文件,则会以无提示方式退出。正确的行为应该是 -LiteralPath
是文本,因此,如果文件不存在,它应显示错误。更改就是将与 -Literal
一起使用的通配符视作文本。
当类型信息以 CSV 显示时,Import-Csv 应在导入时应用 PSTypeNames #5134Import-Csv should apply PSTypeNames upon import when type information is present in the CSV #5134
以前,使用 Export-CSV
导出的对象(带有使用 ConvertFrom-Csv
导入的 TypeInformation
)已不保留类型信息。此更改会将类型信息添加到 成员(若可从 CSV 文件中获得)。
-NoTypeInformation 在 Export-Csv 上应为默认设置 #5131-NoTypeInformation should be default on Export-Csv #5131
此更改旨在解决客户对 Export-CSV
的默认行为的反馈,以包括类型信息。
以前,该 cmdlet 将输出一条注释作为包含对象的类型名称的第一行。此更改是为了默认取消此行为,因为大多数工具不理解该行为。使用 -IncludeTypeInformation
以保留以前的行为。
通过未加密的连接发送 -Credential 时,Web Cmdlet 应发出警告 #5112Web Cmdlets should warn when -Credential is sent over unencrypted connections #5112
使用 HTTP 时,包括密码在内的内容将以明文形式发送。此更改默认不允许此操作,并且如果以不安全的方式传递凭据,则返回错误。用户可以使用 -AllowUnencryptedAuthentication
开关来绕过此操作。
删除 AddTypeCommandBase 类 #5407Remove AddTypeCommandBase class #5407
从 Add-Type
删除 AddTypeCommandBase
类以提高性能。此类仅供 Add-Type cmdlet 使用,不应影响用户。
将带有参数 -Encoding 的 cmdlet 统一为 System.Text.Encoding 类型 #5080Unify cmdlets with parameter -Encoding to be of type System.Text.Encoding #5080
-Encoding
值 Byte
已从文件系统提供程序 cmdlet 中删除。新参数 -AsByteStream
现可用于指定需要一个字节流作为输入,或用于指定输出是一个字节流。
为空和 null -UFormat 参数添加更好的错误消息 #5055Add better error message for empty and null -UFormat parameter #5055
以前,在将空格式字符串传递到 -UFormat
时,会出现毫无用处的错误消息。已添加一个更具描述性的错误。
清理控制台代码 #4995Clean up console code #4995
已删除以下功能,因为它们在 PowerShell Core 中不受支持,也没有计划添加支持,因为它们出于适用于 Windows PowerShell 旧版的原因而存在:-psconsolefile
开关和代码、-importsystemmodules
开关和代码以及字体更改代码。
已删除 RunspaceConfiguration 支持 #4942Removed RunspaceConfiguration support #4942
以前,在使用 API 以编程方式创建 PowerShell 运行空间时,可以使用旧版 RunspaceConfiguration
或较新的 。此更改不再支持 RunspaceConfiguration
并仅支持 InitialSessionState
。
CommandInvocationIntrinsics.InvokeScript 将参数绑定到 $input 而不是 $args #4923CommandInvocationIntrinsics.InvokeScript bind arguments to $input instead of $args #4923
形参的位置不正确会导致将实参作为输入而不是实参进行传递。
从 Get-Help 中删除不受支持的 -showwindow 开关 #4903Remove unsupported -showwindow switch from Get-Help #4903
-showwindow
依赖于 WPF,这在 CoreCLR 上不受支持。
允许为 Remove-Item 在注册表路径中使用 #4866Allow to be used in registry path for Remove-Item #4866
以前,给定通配符的 -LiteralPath
将其视为与 -Path
相同,如果该通配符未找到任何文件,则会以无提示方式退出。正确的行为应该是 -LiteralPath
是文本,因此,如果文件不存在,它应显示错误。更改就是将与 -Literal
一起使用的通配符视作文本。
修复 Set-Service 失败测试 #4802Fix Set-Service failing test #4802
以前,如果使用了 New-Service -StartupType foo
,则忽略 foo
,并使用一些默认的启动类型创建服务。此更改是以显式方式来为无效启动类型引发错误。
将 $IsOSX 重命名为 $IsMacOS #4700Rename $IsOSX to $IsMacOS #4700
在将无效脚本传递到 -File 时,使错误消息保持一致,在传递不确定的参数时提示更好的错误 #4573Make error message consistent when invalid script is passed to -File, better error when passed ambiguous argument #4573
更改 pwsh.exe
的退出代码以与 Unix 约定保持一致
从 Diagnostics 模块删除 LocalAccount 和 cmdlet。Removal of LocalAccount and cmdlets from Diagnostics modules. #4302 #4303#4302 #4303
由于不受支持的 API,会删除 LocalAccounts
模块和 Diagnostics
模块中的 Counter
cmdlet,直到找到更好的解决方案。
以前,使用 powershell.exe(现在使用 pwsh.exe)执行 PowerShell 脚本,使用 -File
无法将 $true
/$false
作为参数值进行传递。添加了支持将 $true
/$false
作为参数的解析值。由于当前记录的语法不起作用,也支持开关值。
从 $PSVersionTable 删除 ClrVersion 属性 #4027Remove ClrVersion property from $PSVersionTable #4027
$PSVersionTable
的 ClrVersion
属性对 CoreCLR 用处不大,最终用户不应使用该值来确定兼容性。
将 powershell.exe 的位置参数从 -Command 更改为 -File #4019Change positional parameter for powershell.exe from -Command to -File #4019
在非 Windows 平台上启用 PowerShell 的整个使用。这意味着,在基于 Unix 的系统上,可以创建脚本可执行文件,以自动调用 PowerShell 而不是显式调用 pwsh
。这也意味着,现在可以执行诸如 powershell foo.ps1
或 powershell fooScript
的操作,而无需指定 -File
。但是,此更改现在要求在尝试执行诸如 powershell.exe Get-Command
的操作时,显式指定 -c
或 -Command
。
实现 Unicode 转义分析 #3958Implement Unicode escape parsing #3958
将
转换为相应的 Unicode 字符。若要输出文本 u####</code> 或 <code>
u{####}`u
,转义反引号:``u
。
在非 Windows 平台上将 New-ModuleManifest 编码更改为 UTF8NoBOM #3940Change New-ModuleManifest encoding to UTF8NoBOM on non-Windows platforms #3940
以前,New-ModuleManifest
创建带有 BOM 的 UTF-16 格式的 psd1 清单,这为 Linux 工具带来了一个问题。这一重大更改将 New-ModuleManifest
的编码更改为非 Windows 平台中的 UTF(无 BOM)。
防止 Get-ChildItem 递归到符号链接中 (#1875)。Prevent Get-ChildItem from recursing into symlinks (#1875). #3780#3780
此更改使 Get-ChildItem
更符合 Unix ls -r
和 Windows dir /s
本机命令。如上述命令一样,该 cmdlet 显示在递归期间找到的目录的符号链接,但不会递归到它们中。
修复 Get-Content -Delimiter 以便不在返回的行中包含分隔符 #3706Fix Get-Content -Delimiter to not include the delimiter in the returned lines #3706
以前,使用 Get-Content -Delimiter
时的输出不一致且不方便,因为它需要进一步处理数据才能删除分隔符。此更改删除返回行中的分隔符。
使用 C# 实现 Format-Hex #3320Implement Format-Hex in C# #3320
-Raw
参数现在是一个“no-op”(因为它不执行任何操作)。今后,所有输出将显示数字的真实表示,其中包含其类型的所有字节(-Raw
参数在执行此更改之前正式执行的操作)。
作为默认 shell 的 PowerShell 对脚本命令不起作用 #3319PowerShell as a default shell doesn't work with script command #3319
在 Unix 上,对于交互式 shell 而言,shell 通常会接受 -i
,许多工具都期待这一行为(例如,script
,以及在将 PowerShell 设置为默认 shell 时),并使用 开关来调用 shell。此更改具有突破性,因为 -i
以前可用作速记以匹配 -inputformat
,它现在需要使用 -in
。
Get-ComputerInfo 属性名中的拼写错误修复 #3167Typo fix in Get-ComputerInfo property name #3167
BiosSerialNumber
被错误地拼写为 BiosSeralNumber
,并被更改为正确的拼写。
添加 Get-StringHash 和 Get-FileHash cmdlet #3024Add Get-StringHash and Get-FileHash cmdlets #3024
此更改是 CoreFX 不支持的一些哈希算法,因此它们将不再可用:
MACTripleDES
RIPEMD160
在传递 $null 返回所有对象而不是错误时在 Get- cmdlet 上添加验证 #2672Add validation on Get- cmdlets where passing $null returns all objects instead of error #2672
将 $null
传递给以下任何项,现在会引发错误:
Get-Credential -UserName
Get-Event -SourceIdentifier
Get-EventSubscriber -SourceIdentifier
Get-Help -Name
Get-PSBreakpoint -Script
Get-PSProvider -PSProvider
Get-PSSessionConfiguration -Name
Get-PSSnapin -Name
Get-Runspace -Name
Get-RunspaceDebug -RunspaceName
Get-Service -Name
Get-TraceSource -Name
Get-Variable -Name
Get-WmiObject -Class
Get-WmiObject -Property
在 Import-Csv 中添加支持 W3C 扩展日志文件格式 #2482Add support W3C Extended Log File Format in Import-Csv #2482
以前,Import-Csv
cmdlet 不能用于直接导入采用 W3C 扩展日志格式的日志文件,并且需要执行其他操作。进行此更改后,支持 W3C 扩展日志格式。
PS 函数中 ValueFromRemainingArguments 的参数绑定问题 #2035Parameter binding problem with ValueFromRemainingArguments in PS functions #2035
ValueFromRemainingArguments
现在返回一些值作为数组,而不是本身是数组的单个值。
从 $PSVersionTable 中删除 BuildVersion #1415BuildVersion is removed from $PSVersionTable #1415
从 $PSVersionTable
中删除 BuildVersion
属性。此属性与 Windows 内部版本相关。我们建议使用 GitCommitId
检索 PowerShell Core 的确切内部版本。
对 Web Cmdlet 的更改Changes to Web Cmdlets
Invoke-WebRequest
现在仅支持基本 HTML 分析。Invoke-WebRequest
始终返回一个BasicHtmlWebResponseObject
对象。已删除ParsedHtml
和Forms
属性。BasicHtmlWebResponseObject.Headers
值现在是String[]
而不是String
。BasicHtmlWebResponseObject.BaseResponse
现在是一个System.Net.Http.HttpResponseMessage
对象。- Web Cmdlet 异常上的
Response
属性现在是一个System.Net.Http.HttpResponseMessage
对象。 - 对于
-Headers
和-UserAgent
参数,严格的 RFC 标头分析是默认设置。这可以使用-SkipHeaderValidation
绕过。 - 不再支持
file://
和ftp://
URI 方案。 - 不再采用
System.Net.ServicePointManager
设置。 - 目前在 macOS 上尚无基于证书的身份验证。
- 通过
http://
URI 使用-Credential
将导致错误。使用https://
URI 或提供-AllowUnencryptedAuthentication
参数来阻止此错误。 - 现在当重定向尝试超过提供的限制时,
-MaximumRedirection
会生成终止错误时,而不是返回最后一次重定向的结果。