【问题标题】:writing soft objects in a powershell cmdlet在 powershell cmdlet 中编写软对象
【发布时间】:2015-08-31 08:20:25
【问题描述】:

在我的 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 个字段。不是我想要的

我还尝试加载到扩展对象中 - 这与字典的作用相同。

已解决:

        var pso = new PSObject();
        foreach (var k in myobj.PropertyNames)
        {
            pso.Members.Add(new PSNoteProperty(k, de.Properties[k]));
        }
        WriteObject(pso);

【问题讨论】:

    标签: c# powershell


    【解决方案1】:

    你可以这样做:

    $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
    

    【讨论】:

    • 我认为您在这里的想法是正确的,发帖人应该创建 PSObject,但您的代码是 PowerShell 并且他/她正在用 c# 编写一个 cmdlet。可能会更好地展示如何在 c# 中做到这一点。
    • @briantist - 糟糕,我完全错过了 C# 部分。多年来,我没有用 C# 编写过 cmdlet。感谢您指出这一点。
    • 他确实是在用c#写一个cmdlet
    • 但是这足以让我开始工作 - 编辑 q 以包含答案
    猜你喜欢
    • 2020-06-27
    • 2012-01-20
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多