在powershell命令行中编写软对象
本文关键字:对象 powershell 命令行 | 更新日期: 2023-09-27 18:10:28
在我的c# cmdlet中,我想写出本质上是字典的对象。即cmlet在编译时不知道对象的具体类型。
假设有
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);
这只在输出Key和Value上产生2个字段。不是我想要的
我也试过加载到一个expandoobject中——这和字典的作用是一样的。
解决:
var pso = new PSObject();
foreach (var k in myobj.PropertyNames)
{
pso.Members.Add(new PSNoteProperty(k, de.Properties[k]));
}
WriteObject(pso);
你可以这样做:
$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