【发布时间】:2019-11-18 08:00:58
【问题描述】:
我编写了一个简单的 C# cmdlet,我们称之为 Get-Data,它返回一个对象数组。
protected override void ProcessRecord() {
base.ProcessRecord();
DummyClass[] refs = new DummyClass[2];
refs[0] = new DummyClass("A", "big");
refs[1] = new DummyClass("B", "small");
base.WriteObject(refs);
return;
}
这是DummyClass的定义:
public class DummyClass {
public string Name { get; set; }
public string Type { get; set; }
public DummyClass(string name, string type) {
this.Name = name;
this.Type = type;
}
}
当我自己运行 cmdlet 时,我得到了预期的输出 - 一行包含列标题,另外一行包含数组的每个元素。
PS> 获取数据 名称类型 ---- ---- 一个大的 B 小但是,当我将输出通过管道传输到 Select-Object 时,我看到列标题,但没有数据行。
我什至尝试过指定行数,但没有成功:
PS> 获取数据 | Select-Object -Property Name,Type -Last 2检查Get-Data 的类型会返回DummyClass[] 的数据类型,这是我所期望的。
(Get-Data).GetType().FullName
有人对我使用Select-Object 时为什么没有数据行有任何想法吗?我不知道这是否重要,但这个 cmdlet 继承自 System.Management.Automation.PSCmdlet。
【问题讨论】:
-
如果你运行
Get-Data | Select-Object -Property *,你看到什么了吗? -
这是我所看到的:计数:2
长度:2 LongLength:2 等级:1 SyncRoot:{A,B} IsReadOnly:False IsFixedSize:True IsSynchronized:False -
对不起,我之前的评论太草率了,我还在弄清楚 cmets 的格式 - 请忽略
,并且每个属性(计数、长度等)都已打开PS中的新行。 -
cmets 的格式很少。最好将任何稍微复杂的内容添加到您的原始帖子中。 ///// 因为你的属性列表没有显示
Name或Type...这意味着你的对象中有一些奇怪的东西。我建议您将对象保存到 $Var,然后查看$Var.GetType()向您显示的内容。
标签: c# powershell cmdlet select-object