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.
(Write-Output -NoEnumerate 1, 2).GetType().Name
(Write-Output -NoEnumerate ([System.Collections.ArrayList] (1, 2))).GetType().Name
Object[]
ArrayList
Ini adalah cara kerjanya di _Windows PowerShell_ v5.1
PSObject[]
PSObject[]
Seperti yang dinyatakan, ini hanya mempengaruhi 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)
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.
Komentar yang paling membantu
Bagaimana ini dibiarkan berlangsung selama ini?