Powershell: Write-Output -NoEnumerate输出PSObject []而不是Object [],并且通常不尊重输入集合类型

创建于 2018-01-19  ·  3评论  ·  资料来源: PowerShell/PowerShell

相关:#5122

  • Write-Output -NoEnumerate给予集合时,总是返回PSObject[]而不是常规的object[]]数组,这是意外的。

  • 此外,这意味着如果传递了诸如[System.Collections.ArrayList]类的其他收集类型,则不会保留该类型。

    • Write-Output的文档(目前仅声明“防止枚举输出是Write-Output”),听起来像输入集合(无论其类型如何)都通过了_ _明智地期望_Windows PowerShell_版本可以达到v5.1确实很荣幸。

我怀疑此回归是由于问题#2035产生的命运不佳的#2038 PR造成的。

重现步骤

(Write-Output -NoEnumerate 1, 2).GetType().Name
(Write-Output -NoEnumerate ([System.Collections.ArrayList] (1, 2))).GetType().Name

预期行为

Object[]
ArrayList

这就是它在_Windows PowerShell_ v5.1中仍然起作用的方式

实际行为

PSObject[]
PSObject[]

如前所述,这仅影响PS _Core_。

环境数据

PowerShell Core v6.0.0 on macOS 10.13.2
PowerShell Core v6.0.0 on Ubuntu 16.04.3 LTS
PowerShell Core v6.0.0 on Microsoft Windows 10 Pro (64-bit; v10.0.15063)
Issue-Bug Resolution-Fixed WG-Engine

最有用的评论

如何允许这种情况持续这么长时间?

所有3条评论

如果是回归-这是一个错误。

如何允许这种情况持续这么长时间?

@Jaykul现在修复此问题。 经过比所需时间更长的尝试之后,事实证明,将参数键入为PSObject[]强制PS枚举在参数绑定阶段向其抛出的任何集合。 不过,将参数键入为PSObject既可以用于单例,也可以用于集合。

此页面是否有帮助?
0 / 5 - 0 等级