2017-06-21 87 views
0

我正在編寫一個腳本,將我所有讀取的電子郵件超過2周時間移至單獨的PST進行歸檔。一旦可以接受,我會通過規則執行它。以編程方式高效地移動電子郵件

但是,我現在的代碼需要很長時間才能完成(大約8分鐘),而在Outlook中進行拖放操作的速度驚人得多。

有誰知道移動大量電子郵件的更好方法嗎?也許通過訪問Outlook的索引?

Add-Type -AssemblyName "Microsoft.Office.Interop.Outlook" 

$Outlook=New-Object -ComObject Outlook.Application 
$Namespace = $Outlook.GetNameSpace("MAPI") 

$Items=1 

while ($Items -gt 0) 
{ 
    $Items=0 
    $SourceFolder = $Namespace.Folders.Item($SourcePSTName).Folders.Item($Folder) 
    $TargetFolder = $Namespace.Folders.Item($TargetPSTName).Folders.Item($Folder) 

    $AllOfDem=($SourceFolder.Items | where {$_.SentOn -lt $SentMaxDate -and $_.Unread -eq $False}) 
    foreach ($Mail in $AllOfDem) 
    { 
     $Mail.Move($TargetFolder) | Out-Null 
     $Items++ 
    } 
} 

回答

2

我懷疑你的問題是沒有這麼多的移動消息(可以使用擴展MAPI或贖回,將所有的信息在一個通話進行優化),而是通過,而循環的一個文件夾中的所有項目 - 這是一個巨大的問題。

代替循環,請使用Items.Find/FindNextItems.Restrict來提供僅返回匹配項的查詢。

相關問題