PowerShell展开(取消忽略)表列中的所有条目

时间:2014-06-07 16:23:02

标签: powershell outlook powershell-v3.0

我正在尝试使用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

但这会失去计数。

如何获得我需要的输出?

1 个答案:

答案 0 :(得分:1)

我认为你的代码是合理的,你只是在做无序的事情。试试这个:

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