如何将字典列表作为格式表中的标题进行爆炸

时间:2013-08-28 14:39:50

标签: powershell dictionary formatting

更新以包括列出对象的空白/空属性

对不起标题,不知道如何标记这个问题。我想表达一个Dictionary对象列表,其中Key为Header / Property,Value为header的属性值。

例如,请使用以下PoSH代码

$obj1 = new-object object | select Data; $obj1.Data = @{"header1"="Value1";"header2"="Value2";}
$obj2 = new-object object | select Data; $obj2.Data = @{"header1"="ValueA";"header2"="ValueB";}
$obj3 = new-object object | select Data; $obj3.Data = @{"header1"="Value1";"header3"="ValueC";}

$tmp = @($obj1,$obj2,$obj3)

$tmp然后如下所示:

Data                       
----                        
{header2, header1}
{header2, header1}
{header3, header1}

$tmp | select -Expand Data获取以下有用信息

Name                           Value   
----                           -----       
header2                        Value2
header1                        Value1
header2                        ValueB
header1                        ValueA
header3                        ValueC
header1                        Value1

无论如何,我可以转动数据并将名称转换为属性(或标题),并用值表示它们。

header1                        header2               header3
----                           -----                 -----
Value1                         ValueB
ValueA                         Value2
Value1                                               ValueC

注意:我已经能够通过编写一个函数来完成此操作,该函数将每个对象放入我的词典列表中,创建一个新对象并通过Add-Member添加属性,但这样做很昂贵当您有数千个条目和数千个词典键

时,进程缓慢

2 个答案:

答案 0 :(得分:3)

由于Powershell v2 new-object有一个property参数,允许您输入一个哈希表,其中键是属性的名称,值是属性值。

$tmp | select -expand data | %{new-object psobject -property $_}

给出:

header2                                                     header1
-------                                                     -------
Value2                                                      Value1
ValueB                                                      ValueA

答案 1 :(得分:1)

这个怎么样:

$tmp | % {"header1,header2"}{$_.data.header1+","+$_.data.header2} | ConvertFrom-Csv

它给出了:

header1                                                                    header2
-------                                                                    -------
Value1                                                                     Value2
ValueA                                                                     ValueB