2014-09-25 47 views
0

我有对象的数组,其输出在控制台上这样PowerShell的表 - 行的列

$VM | %{ $_ | Get-Stat -Stat $metrics -Realtime -Start (Get-Date).AddMinutes(-2) -Instance ""} | Format-Table -AutoSize 

MetricId    Timestamp       Value Unit  
--------    ---------       ----- ----  
cpu.ready.summation  25.9.2014 15:23:40     39 milli  
cpu.ready.summation  25.9.2014 15:23:20     50 milli  
cpu.ready.summation  25.9.2014 15:23:00     36 milli 
cpu.ready.summation  25.9.2014 15:22:40     44 milli 
cpu.ready.summation  25.9.2014 15:22:20     43 milli  
cpu.ready.summation  25.9.2014 15:22:00     46 milli 
cpu.demand.average  25.9.2014 15:23:40     37 MHz    
cpu.demand.average  25.9.2014 15:23:20     37 MHz    
cpu.demand.average  25.9.2014 15:23:00     37 MHz    
cpu.demand.average  25.9.2014 15:22:40     38 MHz    
cpu.demand.average  25.9.2014 15:22:20     40 MHz    
cpu.demand.average  25.9.2014 15:22:00     41 MHz    
cpu.usagemhz.average 25.9.2014 15:23:40     26 MHz    
cpu.usagemhz.average 25.9.2014 15:23:20     52 MHz    
cpu.usagemhz.average 25.9.2014 15:23:00     29 MHz    
cpu.usagemhz.average 25.9.2014 15:22:40     28 MHz    
cpu.usagemhz.average 25.9.2014 15:22:20     51 MHz    
cpu.usagemhz.average 25.9.2014 15:22:00     32 MHz   

如何改变这样的输出?

25.9.2014 15:23:40 39 milli 37 MHz  26 MHz 
25.9.2014 15:23:20 50 milli 37 MHz  52 MHz 
. 
. 
. 
+0

没有标题?或者只是按该列顺序排序? – ShaneC 2014-09-25 14:43:09

+0

使用标题将被优先考虑。 – Primoz 2014-09-25 15:35:36

+0

如果您可以发布允许您查看表格的代码,那么我可能会提供帮助 – ShaneC 2014-09-25 16:11:14

回答

1

看起来像适时使用TimeStamp上的Group-Object,然后为每个时间戳创建一个对象,并为该时间戳的每条记录添加成员:

$data = $VM | %{ $_ | Get-Stat -Stat $metrics -Realtime -Start (Get-Date).AddMinutes(-2) -Instance ""} 
$Converted = $Data | Group TimeStamp | %{ 
    $Record = [pscustomobject][ordered]@{'TimeStamp'=$_.Name} 
    $_.Group |%{ 
     Add-Member -InputObject $Record -MemberType NoteProperty -Name $_.MetricId -Value $_.Value 
     Add-Member -InputObject $Record -MemberType NoteProperty -Name ($_.MetricId + ' Unit') -Value $_.Unit 
    } 
    $Record 
} 
$Converted|ft 

这将输出:

TimeStamp   cpu.ready.summation cpu.ready.summation Unit cpu.demand.average cpu.demand.average Unit cpu.usagemhz.average cpu.usagemhz.average Unit 
---------   ------------------- ------------------------ ------------------ ----------------------- -------------------- ------------------------- 
25.9.2014 15:23:40 39     milli     37     MHz      26     MHz      
25.9.2014 15:23:20 50     milli     37     MHz      52     MHz      
25.9.2014 15:23:00 36     milli     37     MHz      29     MHz      
25.9.2014 15:22:40 44     milli     38     MHz      28     MHz      
25.9.2014 15:22:20 43     milli     40     MHz      51     MHz      
25.9.2014 15:22:00 46     milli     41     MHz      32     MHz      

列标题是那种长,但你可能可以解析这些回位一些子或更换有心计。

编辑:为了缩短标题的缘故,你可以用$_.MetricId.Split('.')[1]取代的$_.MetricId这两种情况下,它会他们缩短为“准备”,“需求”和“usagemhz”与它们相关的单元报头被同样命名。这使得它更具可读性。

1

一种方式做到这一点是创建一个新的集合,然后手动格式对象需要:

$raw = $VM | %{ $_ | Get-Stat -Stat $metrics -Realtime -Start (Get-Date).AddMinutes(-2) -Instance ""} 

$joined = @() 

foreach ($raw_object in $raw) { 
    $need_new_object = ($joined | Select-Object -ExpandProperty Timestamp) ` 
     -notcontains $raw_object.Timestamp 
    $value = $raw_object.Value + " " + $raw_object.Unit 

    if ($need_new_object) { 
     $object = New-Object PSObject -Property @{ 
      "Timestamp" = $raw_object.Timestamp 
     } 

     $joined += $object 
    } else { 
     $object = ` 
      $joined | Where-Object { $_.Timestamp -eq $raw_object.Timestamp } 
    } 

    $object | Add-Member -MemberType "NoteProperty" ` 
     -ErrorAction "SilentlyContinue" -Name $raw_object.MetricId -Value $value 

} 

$joined | Format-Table -AutoSize 

输出正是你想要的东西:

Timestamp   cpu.ready.summation cpu.demand.average cpu.usagemhz.average 
---------   ------------------- ------------------ -------------------- 
25.9.2014 15:23:40 39 milli   37 MHz    26 MHz    
25.9.2014 15:23:20 50 milli   37 MHz    52 MHz    
25.9.2014 15:23:00 36 milli   37 MHz    29 MHz    
25.9.2014 15:22:40 44 milli   38 MHz    28 MHz    
25.9.2014 15:22:20 43 milli   40 MHz    51 MHz    
25.9.2014 15:22:00 46 milli   41 MHz    32 MHz