运行PS“Group-Object”后如何访问“Group”成员

时间:2013-02-19 17:05:53

标签: powershell powershell-v2.0 exchange-server-2010

我的sourcedata类似于以下非规范化表

DisplayName                  LogRecordCount LogRecordBytes
-----------                  -------------- --------------
Mailbox - Low,                    459          43756
Mailbox - Low,                    1628         185542
Mailbox - Low,                    2575         264474
Mailbox - Low,                     522          48813
Mailbox - Low,                     410         138212
Mailbox - Low,                    1057         200043
Mailbox - Freed                  3866        2170719
Mailbox - Freed                   606         370304
Mailbox - Freed                  4137        1939924
Mailbox - Freed                 3655        1654650

我的目标是撰写类似于以下内容的摘要

DisplayName                  LogRecordCount  
-----------                  -------------- 
Mailbox - Low,                     6651            
Mailbox - Freed                   12264     

以下代码非常接近我需要的内容,但“DisplayName”没有出现。 DisplayName的值隐藏在Group-Object命令的结果中。

$stats | ? {$_.DigestCategory -eq 'LogBytes'} | group MailboxGuid | %{
    New-Object psobject -Property @{
        MailboxGuid = $_.Name
        LogRecordBytes = ($_.Group | Measure-Object LogRecordBytes -Sum).Sum
        DisplayName   = $_.Group.DisplayName
    }
}| sort-object LogRecordBytes |  ft -a DisplayName, MailboxGuid, LogRecordBytes

问题

DisplayName = $_.Group.DisplayName在结果中显示显示名称的正确语法是什么?

2 个答案:

答案 0 :(得分:1)

使用以下内容换掉DisplayName = ..行:

DisplayName = $_.Group | Select-Object -ExpandProperty DisplayName -Unique

如果由于一些神奇的原因,组中有不同的DisplayName值,您将得到一个类似{value1, value2},的数组,但通常它只返回一个名称:)

答案 1 :(得分:0)

Graimer的答案非常好,但您也可以从组的第一个元素中选择DisplayName,假设所有组元素都具有DisplayName的相同值

DisplayName = $_.Group[0].DisplayName

只是想让你知道另一种选择。