Powershell: Write-Output -NoEnumerate génère PSObject [] plutôt que Object [] et ne respecte généralement pas le type de collection d'entrée

Créé le 19 janv. 2018  ·  3Commentaires  ·  Source: PowerShell/PowerShell

Connexes: # 5122

  • Write-Output -NoEnumerate , lorsqu'on lui donne une collection, retourne toujours un tableau PSObject[] plutôt qu'un tableau normal object[]] , ce qui est inattendu.

  • De plus, cela signifie que si un type de collection différent tel que [System.Collections.ArrayList] été passé, il n'est pas préservé.

    • Write-Output , qui indique actuellement seulement, "empêche Write-Output d'énumérer la sortie", ce qui ressemble à la collection d'entrée - quel que soit son type - est simplement _passée_ - une attente raisonnable que les versions de _Windows PowerShell_ jusqu'à v5.1 en effet l'honneur.

Je soupçonne que cette régression est une conséquence du malheureux PR # 2038 qui est né du numéro # 2035.

Étapes à suivre pour reproduire

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

Comportement attendu

Object[]
ArrayList

C'est ainsi que cela fonctionne toujours dans _Windows PowerShell_ v5.1

Comportement réel

PSObject[]
PSObject[]

Comme indiqué, cela affecte uniquement PS _Core_.

Données d'environnement

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

Commentaire le plus utile

Comment cela a-t-il pu durer aussi longtemps?

Tous les 3 commentaires

Si c'est une régression - c'est un bug.

Comment cela a-t-il pu durer aussi longtemps?

@Jaykul Corrige ce PSObject[] oblige PS à énumérer la collection que vous lui lancez pendant l'étape de liaison de paramètres. Taper le paramètre comme PSObject fonctionne aussi bien pour les singletons que pour les collections.

Cette page vous a été utile?
0 / 5 - 0 notes