我正在尝试使用PowerShell编制一些Outlook电子邮件统计信息。阻止我的是计算发送给每个特定收件人的电子邮件的数量。 Outlook报告" To"字段作为包含;
分隔的收件人列表的单个字符串。
我想扩展该字符串,以便在向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); Jim Twobob (Customer Org)
9 Someone Smith (Acme Corp); Jane Twobob (Customer Org)
然而,我想看到的是:
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)
我已尝试使用split
功能:
$expr = @{Expression={$_.To -split '; '};Label="ToSplit"}
$byTo | select Count, $expr | select Property * -ExpandProperty ToSplit
但这会失去计数。
如何获得我需要的输出?
答案 0 :(得分:1)
我认为你的代码是合理的,你只是在做无序的事情。试试这个:
$splitTo = $out | % {@($_.To -split '; ')}
$byTo = $splitTo | group-object $_ -noelement | sort Count -Descending | select Count, @{Expression={$_.Name};Label="To"}