我正在编写一个脚本,将所有超过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++
}
}
答案 0 :(得分:2)
我怀疑你的问题并不是移动消息(可以使用扩展MAPI或Redemption在一次调用中移动所有消息进行优化),而是循环浏览文件夹中的所有项目 - 这是个大问题。
使用Items.Find/FindNext
或Items.Restrict
来提供仅返回匹配项的查询,而不是循环。