Powershell: Write-Output -NoEnumerate gera PSObject [] em vez de Object [] e geralmente não respeita o tipo de coleção de entrada

Criado em 19 jan. 2018  ·  3Comentários  ·  Fonte: PowerShell/PowerShell

Relacionado: # 5122

  • Write-Output -NoEnumerate , quando dada uma coleção, sempre retorna um PSObject[] vez de um array object[]] regular, o que é inesperado.

  • Além disso, isso significa que se um tipo de coleção diferente, como [System.Collections.ArrayList] for passado, ele _não_ será preservado.

    • Write-Output 's documentação , que atualmente afirma apenas, "impede que Write-Output enumerar a saída", que soa como a coleção de entrada - seja qual for seu tipo - é simplesmente _passado_ - uma expectativa sensata de que versões do _Windows PowerShell_ até v5.1 realmente honra.

Suspeito que essa regressão seja uma consequência do malfadado # 2038 PR que surgiu da edição # 2035.

Passos para reproduzir

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

Comportamento esperado

Object[]
ArrayList

É assim que ainda funciona no _Windows PowerShell_ v5.1

Comportamento real

PSObject[]
PSObject[]

Conforme declarado, isso afeta apenas PS _Core_.

Dados ambientais

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

Comentários muito úteis

Como isso foi permitido continuar por tanto tempo?

Todos 3 comentários

Se for uma regressão - é um bug.

Como isso foi permitido continuar por tanto tempo?

@Jaykul Corrigindo isso agora. Depois de uma incursão mais longa do que o necessário nos arquivos de pipeline, descobriu-se que digitar seus parâmetros como PSObject[] força o PS a enumerar qualquer coleção que você jogue nele durante o estágio de vinculação de parâmetro. No entanto, digitar o parâmetro como PSObject funciona tanto para singletons quanto para coleções.

Esta página foi útil?
0 / 5 - 0 avaliações