Powershell: Write-Output -NoEnumerate выводит PSObject [], а не Object [], и обычно не учитывает тип входной коллекции.

Созданный на 19 янв. 2018  ·  3Комментарии  ·  Источник: PowerShell/PowerShell

По теме: # 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)
Issue-Bug Resolution-Fixed WG-Engine

Самый полезный комментарий

Как это могло продолжаться так долго?

Все 3 Комментарий

Если это регресс - это ошибка.

Как это могло продолжаться так долго?

@Jaykul Исправлю это сейчас. После более продолжительного, чем необходимо, набега на файлы конвейера выясняется, что ввод ваших параметров как PSObject[] заставляет PS перечислять любую коллекцию, которую вы ему бросаете на этапе привязки параметров. Однако ввод параметра как PSObject отлично работает как для синглтонов, так и для коллекций.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги