【发布时间】:2012-08-19 01:22:46
【问题描述】:
我有一个用 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 name,我希望只排除“description”属性并将 Mikey 和 Davo 堆叠在一起,但不!我明白了:
name
----
我的数据呢!?
谢谢
卢克
顺便说一句:有没有人知道一个很好的学习资源来编写 CmdLets 和使用 PS 的内部结构(而不是大多数书籍所涉及的 PS 用法)?塔
更新
即使我制作了强类型,新建一些并将它们放在 PSDataCollection 中,它也无法按我的预期工作。我的期望显然是错误的。如何正确地将数据集合输出到管道?
已解决
我们必须设置 enumerateCollection = true。听起来很愚蠢,但我们没有使用 WriteObject 保护方法,而是我们自己的 WriteToAvailableOutput,它从 Visual Studio 中转移到调试器!所以我们看不到 WriteObject 上的额外重载 - dhuurr!!
【问题讨论】:
-
不要在问题中写下解决方案,而应将其写为下面的单独答案并将其标记为已接受的答案。
-
是的。我想,因为这首先是一个愚蠢的问题,所以我觉得为它做一个完整的答案有点愚蠢!
标签: c# powershell-2.0