関連:#5122
Write-Output -NoEnumerate
は、コレクションが与えられると、通常のobject[]]
配列ではなく、常にPSObject[]
返します。これは予期しないことです。
さらに、これは、 [System.Collections.ArrayList]
などの別のコレクションタイプが渡された場合、それが保持されないことを意味します。
Write-Output
のドキュメントには、現在「書き込み出力が出力を列挙するのを防ぐ」としか記載されていません。これは、入力コレクションのように_ WindowsPowerShell_バージョンが最大であるという賢明な期待ですv5.1は確かに名誉です。この退行は、問題#2035から生じた不運な#2038PRの結果であると思われます。
(Write-Output -NoEnumerate 1, 2).GetType().Name
(Write-Output -NoEnumerate ([System.Collections.ArrayList] (1, 2))).GetType().Name
Object[]
ArrayList
これは、_Windows PowerShell_v5.1でも引き続き機能する方法です。
PSObject[]
PSObject[]
前述のように、これは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)
リグレッションの場合、バグです。
これはどのようにしてこれほど長く続くことが許されたのでしょうか?
@Jaykulこれを今すぐ修正します。 パイプラインファイルへの必要以上の侵入の後、パラメータをPSObject[]
として入力すると、PSは、パラメータのバインド段階でスローしたコレクションを列挙するように強制されます。 ただし、パラメータをPSObject
として入力すると、シングルトンとコレクションの両方で問題なく機能します。
最も参考になるコメント
これはどのようにしてこれほど長く続くことが許されたのでしょうか?