Powershell: Write-Output -NoEnumerateは、Object []ではなくPSObject []を出力し、通常、入力コレクションタイプを尊重しません。

作成日 2018年01月19日  ·  3コメント  ·  ソース: PowerShell/PowerShell

関連:#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)
Issue-Bug Resolution-Fixed WG-Engine

最も参考になるコメント

これはどのようにしてこれほど長く続くことが許されたのでしょうか?

全てのコメント3件

リグレッションの場合、バグです。

これはどのようにしてこれほど長く続くことが許されたのでしょうか?

@Jaykulこれを今すぐ修正します。 パイプラインファイルへの必要以上の侵入の後、パラメータをPSObject[]として入力すると、PSは、パラメータのバインド段階でスローしたコレクションを列挙するように強制されます。 ただし、パラメータをPSObjectとして入力すると、シングルトンとコレクションの両方で問題なく機能します。

このページは役に立ちましたか?
0 / 5 - 0 評価