2014-06-07 1 views
1

PowerShell을 사용하여 일부 Outlook 전자 메일 통계를 처리하려고합니다. 나를 멈추게하는 것은 각 특정 수신자에게 보낸 이메일의 수를 계산하는 것입니다. Outlook에서는받는 사람 필드를 ;으로 구분 된 단일받는 사람 목록으로보고합니다.PowerShell이 ​​테이블 열의 모든 항목을 확장 (unpivot)

전자 메일을 5 명이 보낸 경우 각 사람이 계산되도록 해당 문자열을 확장하려고합니다.

예를 들어, 내 코드는 지금까지 있습니다 :

# Create a link to Outlook 
Add-type -assembly "Microsoft.Office.Interop.Outlook" | out-null 
$outlook = new-object -comobject outlook.application 
$namespace = $outlook.GetNameSpace("MAPI") 
# Take a copy of the copy outbox (which is maintained by an Outlook rule) 
$out = $namespace.Folders.Item('Local Copy').folders.item('Copy Outbox').items 

# Group by who the email was sent to 
$byTo = $out | group-object To -noelement | sort Count -Descending | select Count, @{Expression={$_.Name};Label="To"} 

같은 반환 :

Count To 
----- -- 
    24 Fred Talkative 
    11 A Person (Acme Corp) 
    1 Jim Twobob (Customer Org) 
    9 Someone Smith (Acme Corp) 
    1 Jane Twobob (Customer Org) 

: 반면

Count To 
----- -- 
    24 Fred Talkative 
    11 A Person (Acme Corp); Jim Twobob (Customer Org) 
    9 Someone Smith (Acme Corp); Jane Twobob (Customer Org) 

을, 내가보고 싶은 것은 같은 나는 split 함수를 사용해 보았습니다 :

$expr = @{Expression={$_.To -split '; '};Label="ToSplit"} 
$byTo | select Count, $expr | select Property * -ExpandProperty ToSplit 

하지만이 개수는 줄어 듭니다.

출력물을 어떻게 얻을 수 있습니까?

답변

1

나는 당신의 코드가 건강하다고 생각한다. 이것을 시도하십시오 :

$splitTo = $out | % {@($_.To -split '; ')} 
$byTo = $splitTo | group-object $_ -noelement | sort Count -Descending | select Count, @{Expression={$_.Name};Label="To"} 
+0

아마 현명한 변화. 불행히도, 그것은 작동하지 않습니다. 결과는'; 'ToSplit' 필드를 보여줄 때 제거되었습니다. –

+0

분할 표현식을 확장해야하지만, 그렇게하면 그룹 객체를 더 이상 수행 할 수없는 것처럼 보입니다. 하나의 항목 만 얻습니다. –

+0

표현 비트를 제거하고 추가 단계를 추가했습니다. 나는 이것이 제대로 작동한다고 생각한다. –