2013-02-19 2 views
1

를 실행 한 후 나는 다음과 같은 비정규 테이블에 sourcedata 유사한이는 어떻게 PS "그룹 객체"

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에 대한 올바른 구문은 무엇입니까? 다음으로 당신의 DisplayName = .. 라인 출력

+0

우리가 볼 수없는 재산으로 그룹화하기 때문에 당신을 도울 수 없습니다. 그룹화하는 속성은 정적 인 속성입니다. 따라서 각 그룹 (MailboxGuid 당 하나의 그룹)에는 'DisplayName'값이 여러 개있을 수 있습니다. 'DisplayName'과'LogRecordCount' 만 원한다면 왜'MailboxGuid'에 의한 그룹화가 좋지 않을까요? –

+0

@Graimer MailboxGuid == 모든 논리적 작업에 대한 표시 이름을 가정합니다. "john smith"라는 두 개의 표시 이름이있을 수 있습니다. 그것이 내가 Guid를 사용하는 이유입니다. 소스 데이터 – LamonteCristo

+0

okey를 업데이트하므로 그룹당 표시 이름 만있을 수 있습니까? 그렇다면 다음과 같이 작동합니다 :'DisplayName = $ _. Group | % {$ _. DisplayName}'(현재'displayname' 코드로 대체하십시오) –

답변

1

스왑 :

어떤 마법의 이유로 그룹에서 다른 DisplayName 값이있는 경우
DisplayName = $_.Group | Select-Object -ExpandProperty DisplayName -Unique 

, 당신은 {value1, value2}, 같은 배열을 얻을 것이다하지만, 일반적으로 그것은 단지 하나의 이름을 반환합니다 :)

0

Graimer의 대답은 완벽하게 괜찮지 만, 당신은 또한 단지 모든 그룹의 요소는 DisplayName

012에 대해 동일한 값을 가지고 가정, 그룹의 첫 번째 요소에서 DisplayName을 뽑을 수
DisplayName = $_.Group[0].DisplayName 

다른 대안을 알려 드리고자합니다.