Relacionado: # 5122
Write-Output -NoEnumerate
, cuando se le da una colección, siempre devuelve un PSObject[]
lugar de una matriz object[]]
normal, lo cual es inesperado.
Además, esto significa que si se pasó un tipo de colección diferente, como [System.Collections.ArrayList]
, _no_ se conserva.
Write-Output
, que actualmente solo dice, "evita que Write-Output enumere la salida", que suena a que la colección de entrada, sea cual sea su tipo, simplemente se _pasó_ - una expectativa sensata de que _Windows PowerShell_ versiones hasta v5.1 de hecho honor.Sospecho que esta regresión es una consecuencia del desafortunado # 2038 PR que surgió del número # 2035.
(Write-Output -NoEnumerate 1, 2).GetType().Name
(Write-Output -NoEnumerate ([System.Collections.ArrayList] (1, 2))).GetType().Name
Object[]
ArrayList
Así es como todavía funciona en _Windows PowerShell_ v5.1
PSObject[]
PSObject[]
Como se indicó, esto afecta solo a 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 es una regresión, es un error.
¿Cómo se ha permitido que esto continúe durante tanto tiempo?
@Jaykul Arreglando esto ahora. Después de una incursión más larga de lo necesario en los archivos de canalización, resulta que escribir sus parámetros como PSObject[]
obliga a PS a enumerar cualquier colección que le arroje durante la etapa de vinculación de parámetros. Sin embargo, escribir el parámetro como PSObject
funciona tanto para singletons como para colecciones.
Comentario más útil
¿Cómo se ha permitido que esto continúe durante tanto tiempo?