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 名称,我希望只排除“描述”属性并将 Mikey 和 Davo 堆叠在一起,但没有!我得到:

name
----

我的数据呢!?

谢谢

卢克

顺便说一句:有没有人知道用于编程 CmdLets 和使用 PS 内部(而不是大多数书籍所涉及的 PS 使用)的良好学习资源?塔

更新

即使我制作了强大的类型,新的一些并将它们放在 PSDataCollection 中,它也不能像我预期的那样工作。我的期望显然是错误的。如何正确地将数据集合输出到管道?

解决了

我们必须设置 enumerateCollection = true。听起来很愚蠢,但我们没有使用 WriteObject 保护方法,而是我们自己的 WriteToAvailableOutput,它从 Visual Studio 中转移到调试器!所以我们看不到 WriteObject 上的额外重载 - dhuurr!

4

1 回答 1

1

答案是使用WriteObject 重载并将enumerateCollection 参数设置为true。

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

愚蠢的我。

于 2012-08-18T17:22:46.173 回答