2013-04-16 96 views
0

我想從Exchange 2010中保存未送達的電子郵件地址並獲取包含電子郵件以及未送達多少次的表的結果。爲此我寫了腳本:
在powershell中計算電子郵件

$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" 
} 
} 

但它不起作用。請幫助找出問題所在。

回答

0

,如果你使用的郵件的cmdlet正確的我無法驗證,而且要簡化你整個代碼,使用Select-Object -Expand分裂了所有的陣列(如果有一個郵件多reciepients)和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 

,看看它是否返回你想要的結果。

1

你試圖使用collectinn($受惠人士票價)在$輸出哈希表鍵。

Get-messagetrackinglog可以返回數據的日誌。我會避免組對象並堅持哈希表,但這樣做:

$output = @{} 

    Get-TransportServer | 
    Get-MessageTrackingLog -EventID "FAIL" -start "04/14/2013" -resultsize unlimited | 
    Select -Expand Recipients | 
    foreach {$output[$_]++} 
+0

只是出於好奇,爲什麼你會避免使用'組對象'? –

+0

這是一個阻塞(非流式)cmdlet。所有的管道輸入都會在那裏累積,因此可以進行分組。如果有很多輸入,它會導致高內存分配來保存它。使用散列表,散列表鍵將被創建/增加,然後在管道末尾丟棄輸入。 – mjolinor

+0

是真實的,但在這之前需要有很多對象,因爲您只是提取收件人,所以這會成爲問題。 –