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.
(Write-Output -NoEnumerate 1, 2).GetType().Name
(Write-Output -NoEnumerate ([System.Collections.ArrayList] (1, 2))).GetType().Name
Object[]
ArrayList
C'est ainsi que cela fonctionne toujours dans _Windows PowerShell_ v5.1
PSObject[]
PSObject[]
Comme indiqué, cela affecte uniquement 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)
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.
Commentaire le plus utile
Comment cela a-t-il pu durer aussi longtemps?