在PowerShell cmdlet中编写软对象

时间:2015-08-29 00:25:51

标签: c# powershell

在我的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);

1 个答案:

答案 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