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

在powershell命令行中编写软对象

你可以这样做:

$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