По теме: # 5122
Write-Output -NoEnumerate
при задании коллекции всегда возвращает PSObject[]
а не обычный массив object[]]
, что является неожиданным.
Кроме того, это означает, что если был передан другой тип коллекции, например [System.Collections.ArrayList]
, он _не_ сохраняется.
Write-Output
, которая в настоящее время только заявляет, «не позволяет Write-Output перечислять выходные данные», что звучит так, как будто входная коллекция - независимо от ее типа - просто _пропускается_ - разумное ожидание, что _Windows PowerShell_ версии до v5.1 действительно честь.Я подозреваю, что этот регресс - следствие злополучного PR №2038, возникшего из-за проблемы №2035.
(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)
Если это регресс - это ошибка.
Как это могло продолжаться так долго?
@Jaykul Исправлю это сейчас. После более продолжительного, чем необходимо, набега на файлы конвейера выясняется, что ввод ваших параметров как PSObject[]
заставляет PS перечислять любую коллекцию, которую вы ему бросаете на этапе привязки параметров. Однако ввод параметра как PSObject
отлично работает как для синглтонов, так и для коллекций.
Самый полезный комментарий
Как это могло продолжаться так долго?