Powershell: Write-Output -NoEnumerate gibt PSObject [] anstelle von Object [] aus und berücksichtigt im Allgemeinen nicht den Typ der Eingabesammlung

Erstellt am 19. Jan. 2018  ·  3Kommentare  ·  Quelle: PowerShell/PowerShell

Verwandte: # 5122

  • Write-Output -NoEnumerate gibt bei einer Sammlung immer ein PSObject[] und nicht ein reguläres object[]] -Array, was unerwartet ist.

  • Darüber hinaus bedeutet dies, dass ein anderer Auflistungstyp wie [System.Collections.ArrayList] nicht beibehalten wird, wenn er übergeben wurde.

Ich vermute, diese Regression ist eine Folge der unglückseligen PR Nr. 2038, die aus der Ausgabe Nr. 2035 hervorgegangen ist.

Schritte zum Reproduzieren

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

Erwartetes Verhalten

Object[]
ArrayList

So funktioniert es immer noch in _Windows PowerShell_ v5.1

Tatsächliches Verhalten

PSObject[]
PSObject[]

Wie bereits erwähnt, betrifft dies nur PS _Core_.

Umgebungsdaten

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

Hilfreichster Kommentar

Wie konnte das so lange so bleiben?

Alle 3 Kommentare

Wenn es eine Regression ist, ist es ein Fehler.

Wie konnte das so lange so bleiben?

@ Jaykul Das jetzt PSObject[] PS dazu zwingt, die Sammlung aufzulisten, die Sie während der Parameterbindungsphase darauf werfen. Die Eingabe des Parameters als PSObject funktioniert jedoch sowohl für Singletons als auch für Sammlungen einwandfrei.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen