2014-09-25 48 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