在线交换 - 使用 powershell 移动消息

Exchange online - move messages with powershell

我有一个巨大的邮箱 (~50Gb),'Inbox' 中有很多邮件。我正在寻找将特定日期之前收到的某些邮件移动到同一邮箱中的另一个文件夹。 我曾尝试通过 Outlook Windows 应用程序执行此操作,但它似乎太慢了,我无法一次对所有邮件执行此操作。 Outlook 刚刚崩溃。 有什么方法可以从 Exchange Powershell 执行任务吗?我当然可以创建服务器端规则,但如何将其应用于 'Inbox' 中已有的消息?

New-InboxRule -Name Testmove2018 -Mailbox test -MoveToFolder "MailboxName:18" -ReceivedAfterDate "09/01/2015"

奥列格

Exchange Online powershell 模块仍然允许您复制和删除与 Search-Mailbox 搜索匹配的邮件,但您必须先将它们复制到其他地方。使用空邮箱:

# First, check your search filter using EstimateOnly or LogOnly:
Search-Mailbox myUser@domain.com -SearchQuery 'Subject:Move Me' -EstimateResultOnly

# Copy the items to a temp mailbox and delete from the primary
# (EXO does not allow copying search results to same mailbox)
# param block just for readability:
$Params = @{
  Identity      = 'myUser@domain.com' 
  SearchQuery   = 'Subject:Move Me' 
  TargetMailbox = 'temp@domain.com' 
  TargetFolder  = 'Temp' 
  DeleteContent = $true
}
$TempResult = Search-Mailbox @Params

# Now move back to original mailbox
$Params.Identity      = 'temp@domain.com'
$Params.TargetMailbox = 'myUser@domain.com'
$Params.TargetFolder  = 'Moved'
$MoveResult = Search-Mailbox @Params

那么只要确保电子邮件的数量相等即可。 EXO 可能需要一段时间才能同步,所以如果它没有找到所有要移回的电子邮件,请稍等片刻,然后 运行 再次搜索:

If ($TempResult.ResultItemsCount -eq $MoveResult.ResultItemsCount) {
  "We're good!"
} Else { 
  Write-Warning "Move results not equal!"
  $TempResult
  $MoveResult
}

请注意,这是 'Old' 方法,该方法已经停用,将来可能会被删除。新方法应该使用 New-ComplianceSearch 风格的命令,但它们有一些限制,并不是为此目的而构建的。

在我看来,“最简单”的方法是在浏览器中打开邮箱 > 搜索您想要的内容 > 如果需要,向下滚动以加载所有邮件 > select 全部 > 移至 > "移动到不同的文件夹..."