在我的c#cmdlet中,我想写出基本上是字典的对象。即cmdlet在编译时不知道对象的具体类型。
假设我有
myobj1["Size"] = 10
myobj1["color"] = "Red"
myobj2["Size"] = 20
myobj2["color"] = "Blue"
我想注入看起来像
的管道对象Size Color
---- -----
10 Red
20 Blue
我试过了
var dict = myObj as IDictioanry<string,object> // it does implement IDictionary
WriteObject(dict);
这只会在输出键和值上生成2个字段。不是我想要的
我也尝试加载到expandoobject中 - 这与字典完全相同。
解决:
var pso = new PSObject();
foreach (var k in myobj.PropertyNames)
{
pso.Members.Add(new PSNoteProperty(k, de.Properties[k]));
}
WriteObject(pso);
答案 0 :(得分:0)
您可以这样做:
$myobj = @()
$myobj += New-Object PSObject -Property @{
Size = 10
Color= "Red"
}
$myobj += New-Object PSObject -Property @{
Size = 20
Color= "Blue"
}
$myobj | Where-Object Size -eq 10
或单行:
$myobj = @()
$myobj += New-Object PSObject -Property @{Size = 10;Color= "Red"}
$myobj += New-Object PSObject -Property @{Size = 20;Color= "Blue"}
$myobj | Where-Object Size -eq 20
或将新对象部分移动到一个函数中:
function New-MyObject([int]$size,[string]$color)
{
return New-Object PSObject -Property @{Size = $size;Color= "$color"}
}
$myobj = @()
$myobj += New-MyObject 10 Red
$myobj += New-MyObject -size 20 -color Blue
$myobj | Where-Object Size -eq 20