我正在写一个脚本,把我所有读过的电子邮件都移到一个独立的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++
}
}发布于 2017-06-21 21:50:59
我怀疑您的问题不在于移动消息(可以使用扩展的MAPI或Redemption (我是它的作者)来优化消息以在单个调用中移动所有消息),而是在一个文件夹中循环遍历所有的项--这是一个很大的问题。
使用Items.Find/FindNext或Items.Restrict来提供只返回匹配项的查询,而不是循环。
https://stackoverflow.com/questions/44686591
复制相似问题