1

オブジェクトの配列を返すC#で記述されたカスタムCmdLetがあります。テストの目的で、それらは匿名です。

    protected override void ProcessRecord()
    {
        var anonType1 = new { name = "Mikey", description = "Brown" };
        var anonType2 = new { name = "Davo", description = "Green" };

        List<object> stuff = new List<object>();
        stuff.Add(anonType1);
        stuff.Add(anonType2);

        this.WriteObject(stuff.ToArray());
    }

これにより、PS2で次の出力が得られます。

name       description
----       -----------
Mikey      Brown
Davo       Green

Select-Object名を使用する場合は、「description」プロパティを除外して、MikeyとDavoを積み重ねたいと思いますが、違います。私は得る:

name
----

私のデータはどこにありますか!?

ありがとう

ルーク

補足として:CmdLetsをプログラミングし、PSの内部を操作するための優れた学習リソースを知っている人はいますか(ほとんどの本で使用されているPSの使用法ではありません)。Ta

アップデート

強力な型を作成し、いくつかを新しくしてPSDataCollectionに入れても、期待どおりに機能しません。私の期待は明らかに間違っています。データのコレクションをパイプラインに正しく出力するにはどうすればよいですか?

解決済み

enumerateCollection=trueを設定する必要があります。ばかげているように聞こえますが、WriteObjectで保護されたメソッドを使用していませんでしたが、VisualStudio内からデバッガーに転送する独自のWriteToAvailableOutputを使用していました。したがって、WriteObjectの余分なオーバーロードを確認できませんでした--dhuurr !!

4

1 に答える 1

1

enumerateCollectionパラメーターをtrueに設定してWriteObjectオーバーロードを使用するように答えてください。

this.WriteObject(stuff.ToArray(), true);

愚かな私。

于 2012-08-18T17:22:46.173 に答える