2011-10-11 108 views
0

我有一个小PowerShell脚本,它使用Outlook互操作将某些邮件从收件箱移动到其他文件夹。基本的移动操作使用下面的代码完成:展望Items.Restrict不返回所有邮件

[Reflection.Assembly]::LoadWithPartialname("Microsoft.Office.Interop.Outlook") | Out-Null 
$olFolders = "Microsoft.Office.Interop.Outlook.OlDefaultFolders" -as [type] 
$outlook = new-object -comobject outlook.application 
$namespace = $outlook.GetNameSpace("MAPI") 
$inbox = $namespace.getDefaultFolder($olFolders::olFolderInbox) 
$filter = "[SenderName] = 'Dummy Sender'" 
$messages = $inbox.items.Restrict($filter) 
$messages | % { 
    Write-Host "`t$($_.Subject)" 
    [void]$_.Move($destination) | Out-Null 
} 

我注意到的问题是,items.Restrict没有返回所有匹配的消息。每次运行脚本时,我都会收到3到20条消息。

有没有人观察过此行为?有什么明显的我失踪了?

+0

我已经完成varius SenderName和$ message.count匹配计数前景(还有来自发件人的567封邮件) –

回答

4

当您仍在循环中时,您正在修改集合。 或者将条目ID保存到一个静态数组/列表中,然后重新打开一次一条消息,或者使用从倒数到1的循环。

+0

doh ...感谢您注意并指出它。我会站在我房间的一个角落。 :-( – Nasir