使用PowerShell移动Exchange邮箱邮件报错求助:无法找到收件人
问题修复方案
原脚本核心错误
- 错误嵌套调用
Get-MailboxFolderStatistics:第一次获取到test文件夹的统计对象后,再次调用该cmdlet会把这个对象当作邮箱标识传入,导致系统无法识别user@company.com\test为有效收件人。 Get-MailboxFolderStatistics仅能获取文件夹的统计信息(如项目数、大小),无法直接提取文件夹内的邮件列表。- 使用
Move-Item错误:Exchange Online中移动邮件需使用专门的Move-EXOMessagecmdlet,而非通用文件操作的Move-Item。
修正后的脚本
$mailboxName = "user@company.com" $sourceFolderName = "test" $targetFolderName = "test2" $successCount = 0 $failureCount = 0 try { # 获取源文件夹的唯一标识FolderId $sourceFolder = Get-MailboxFolderStatistics -Identity $mailboxName | Where-Object { $_.Name -eq $sourceFolderName } if (-not $sourceFolder) { throw "源文件夹 $sourceFolderName 在邮箱 $mailboxName 中不存在" } # 获取目标文件夹的唯一标识FolderId $targetFolder = Get-MailboxFolderStatistics -Identity $mailboxName | Where-Object { $_.Name -eq $targetFolderName } if (-not $targetFolder) { throw "目标文件夹 $targetFolderName 在邮箱 $mailboxName 中不存在" } # 提取源文件夹内的所有邮件 $emails = Get-EXOMessage -Mailbox $mailboxName -FolderId $sourceFolder.FolderId # 遍历移动每一封邮件 foreach ($email in $emails) { try { Move-EXOMessage -Identity $email.Id -TargetFolder $targetFolder.FolderId $successCount++ } catch { $failureCount++ Write-Host "移动邮件失败:$($email.Subject),错误信息:$_" } } Write-Host "执行完成:成功移动 $successCount 封邮件,失败 $failureCount 封" } catch { Write-Host "全局错误:$_" }
额外注意事项
- 确保
ExchangeOnlineManagement模块版本在v3.0以上,旧版本可能没有Get-EXOMessage和Move-EXOMessagecmdlet。 - 如果存在同名文件夹(如不同父目录下的
test),建议通过FolderPath精准匹配,示例:Where-Object { $_.FolderPath -eq "/test" }。
内容的提问来源于stack exchange,提问作者TFesmire
相关产品推荐
相关产品推荐

