2017-06-21 2 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/FindNextまたはItems.Restrictを使用します。

関連する問題