2014-03-24 57 views
3

的产量归集我有一个对象具有属性的集合:PowerShell的:对象

$col = @{....} 

和数据是这样的:

id  name  items 
--- ----  ----- 
01  a  (a, b, c, d) 
02  .... 

项目是字符串数组。如果我输出$ col的内容,则数据如上显示。有什么方法可以输出这样的值吗?

id  name  items 
--- ----  ----- 
01  a  a 
       b 
       c 
       d 
02  b   
03  c  c1 
04  d  d1 
       d2 
05 ... 

更新后,items栏可能包含空的,一个或多个项目。

+0

我知道这个问题已经回答了,但我想我会向我的回答[此(http://stackoverflow.com/questions/22723954/powershell-autosize-and-specific-column-width/22724702#22724702)作为替代品,因为我认为它更通用一点。 – TheMadTechnician

回答

5

首先,我建立一些东西,大约是你的对象,来进行测试:

$col = @(

    (New-Object –TypeName PSObject –Prop @{'id'='01';'name'='a';'items'[email protected](1,2,3)}), 
    (New-Object –TypeName PSObject –Prop @{'id'='02';'name'='b';'items'[email protected](1,2,3)}), 
    (New-Object –TypeName PSObject –Prop @{'id'='03';'name'='c';'items'[email protected](1,2,3)}) 
    ) 

然后打印:

$col 

name id items  
---- -- -----  
a 01 {1, 2, 3} 
b 02 {1, 2, 3} 
c 03 {1, 2, 3} 

然后定义自定义格式规则的“项目”列,这使用换行符将收集项目连接在一起:

$itemFormat = @{Expression={($_.items -join "`n")};Label="Items";width=6} 

然后打印收集与格式表,用-Wrap允许它包裹排长:

$col | Format-Table id,name,$itemFormat -Wrap -AutoSize 

其中给出:

id name Items 
-- ---- ------ 
01 a 1  
     2  
     3  
02 b 1  
     2  
     3  
03 c 1  
     2  
     3  
+0

我正在尝试您的解决方案。我意识到的一件事是物品可能包含空的或只有一个物品,如“1”。在这种情况下,加入将不起作用。我的问题是一个简化的问题。任何方式来处理空的,一个或数组字符串值的项目? –

+0

我已更新我的问题,更多列项目的例子。 –

+0

@ David.Chu.ca我会尝试将格式Expression更改为“@($ _。items)-join”,这将强制它成为一个数组。我认为这将适用于'项目'中的空值,单值和多值。 – TessellatingHeckler