Powershell: Write-Output -NoEnumerate menghasilkan PSObject [] daripada Object [] dan umumnya tidak menghormati jenis koleksi input

Dibuat pada 19 Jan 2018  ·  3Komentar  ·  Sumber: PowerShell/PowerShell

Terkait: # 5122

  • Write-Output -NoEnumerate , ketika diberikan koleksi, selalu mengembalikan PSObject[] daripada array object[]] , yang tidak terduga.

  • Selain itu, ini berarti bahwa jika jenis koleksi yang berbeda seperti [System.Collections.ArrayList] disahkan, _not_ dipertahankan.

    • Write-Output 's dokumentasi , yang saat ini hanya menyatakan, "mencegah Write-Output dari menghitung output", yang terdengar seperti koleksi input - apapun jenisnya - hanya _dipintas_ - ekspektasi yang masuk akal bahwa _Windows PowerShell_ versi hingga v5.1 memang kehormatan.

Saya menduga regresi ini adalah konsekuensi dari nasib buruk # 2038 PR yang muncul dari masalah # 2035.

Langkah-langkah untuk mereproduksi

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

Perilaku yang diharapkan

Object[]
ArrayList

Ini adalah cara kerjanya di _Windows PowerShell_ v5.1

Perilaku sebenarnya

PSObject[]
PSObject[]

Seperti yang dinyatakan, ini hanya mempengaruhi PS _Core_.

Data lingkungan

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

Komentar yang paling membantu

Bagaimana ini dibiarkan berlangsung selama ini?

Semua 3 komentar

Jika itu regresi - itu adalah bug.

Bagaimana ini dibiarkan berlangsung selama ini?

@Jayul Memperbaiki ini sekarang. Setelah pencarian yang lebih lama dari yang diperlukan ke dalam file pipeline, ternyata mengetik parameter Anda sebagai PSObject[] memaksa PS untuk menghitung koleksi apa pun yang Anda lemparkan selama tahap pengikatan parameter. Mengetik parameter sebagai PSObject berfungsi baik untuk lajang maupun koleksi.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat