0

我想从 Exchange 2010 中保存未送达的电子邮件地址并获取表的结果,其中包含电子邮件以及未送达的次数。为此,我编写了脚本:

$all = Get-TransportServer | Get-MessageTrackingLog -EventID "FAIL" -start "04/14/2013" -resultsize unlimited | Select Recipients
$output = @{}
foreach($i in $all)
{ 
$v = $i.Recipients
if ($output.Contains($v))
{
$output.set_Item($v,$output[$v]+1)
$output[$v]
}
else
{
$output.Add($v, 1)
"new"
}
}

但它不起作用。请帮助找出问题所在。

4

2 回答 2

1

您正在尝试使用 collectinn ($recipents) 作为 $output 中的哈希表键。

get-messagetrackinglog 可以返回一个日志数据。我会避免使用 Group-Object 并坚持使用哈希表,但要这样做:

 $output = @{}

  Get-TransportServer |
  Get-MessageTrackingLog -EventID "FAIL" -start "04/14/2013" -resultsize unlimited |
  Select -Expand Recipients |
  foreach {$output[$_]++}
于 2013-04-16T10:46:29.990 回答
0

我无法验证您是否正确使用了 mail-cmdlet,但为了简化整个代码,请使用Select-Object -Expand拆分所有数组(如果邮件有多个收件人)并Group-Object计算每个地址:

Get-TransportServer |
Get-MessageTrackingLog -EventID "FAIL" -start "04/14/2013" -resultsize unlimited |
Select-Object -ExpandProperty Recipients |
Group-Object |
Select Name, Count

要验证其余代码是否有效,您必须运行

Get-TransportServer |
Get-MessageTrackingLog -EventID "FAIL" -start "04/14/2013" -resultsize unlimited

如果返回您想要的结果,请自行查看。

于 2013-04-16T09:45:20.447 回答