迁移到 Microsoft 365 或从 Microsoft 365 迁移的邮箱的存档邮箱问题

原始 KB 编号: 2757430

问题

将邮箱迁移到 Microsoft 365 或从 Microsoft 365 迁移并使用存档邮箱时,会遇到以下问题:Microsoft Exchange 邮箱复制服务 (Microsoft Exchange Online中的 MRS) 在迁移结束时标记邮箱的 ArchiveDomain 属性的目标域值。

注意

问题不应发生在没有存档邮箱的帐户上。

有五种方案与存档邮箱相关。 每个方案都需要不同的解决方案。

  • 方案 1 - 载入:将本地Microsoft Exchange Server邮箱移动到Exchange Online。
  • 方案 2 - 载入:存档邮箱存在于Exchange Online中,并且将主邮箱从本地Exchange Server环境移动到Exchange Online。
  • 方案 3 - 卸载:启用存档邮箱,然后将主邮箱和存档邮箱从Exchange Online迁移到本地Exchange Server环境。 当主邮箱已位于本地,并且你决定将存档邮箱从Exchange Online卸载到本地Exchange Server环境时,也会出现类似的情况。
  • 方案 4 - 卸载:主邮箱未启用存档邮箱,并且将主邮箱从Exchange Online移动到本地Exchange Server环境。
  • 方案 5 - 卸载:主邮箱位于本地Exchange Server环境中,存档邮箱位于 Exchange Online。 执行以下操作之一时,可能会出现这种情况:
    • 你卸载主邮箱。 但是,请将存档邮箱保留在Exchange Online中。
    • 主邮箱和存档邮箱都位于本地Exchange Server环境中。 但是,仅载入存档邮箱。

    注意

    唯一支持的存档拆分方案是本地主邮箱和 Exchange Online 中的存档邮箱。

原因

如果邮箱在本地Exchange Server环境和Exchange Online之间迁移,则会出现此问题。

如果使用以下Windows PowerShell cmdlet 查看存档属性,则会发现存档状态为“活动”。 但是,大部分存档信息都缺失。

Get-Mailbox alias |fl Name, Archive*

注意

可以使用本地 Exchange 命令行管理程序或 Exchange Online PowerShell 来运行 cmdlet。 有关如何使用 Exchange Online PowerShell 的详细信息,请转到将Windows PowerShell连接到服务

运行 cmdlet 时,结果如下所示:

Name : jsmith
ArchiveDatabase :
ArchiveGuid : 00000000-0000-0000-0000-000000000000
ArchiveName : {}
ArchiveQuota : 100 GB (107,374,182,400 bytes)
ArchiveWarningQuota : 90 GB (96,636,764,160 bytes)
ArchiveDomain : contoso.mail.onmicrosoft.com
ArchiveStatus : Active

解决方案

若要解决此问题,请根据你的方案使用以下方法之一。

方案 1

方案 1 中的问题已解决,如下所示:解决到Exchange Online的所有载入迁移,并且不再设置 ArchiveDomain 属性,直到租户管理员启用存档邮箱。

在解决此问题之前,用户报告 Outlook 中存在存档邮箱,并收到身份验证提示。 但是,用户无法在Outlook Web App中看到相同的存档邮箱。 (Microsoft 将存档称为“虚影存档”,因为它不是可供用户访问的真正存档邮箱。

方案 2

方案 2 中的问题已解决,如下所示:负责移动邮箱的 MRS 组件现在正确考虑存在Exchange Online存档邮箱。 因此,用户可以在 Outlook 或 Outlook Web App中正确访问其存档邮箱,而不会发生任何错误。 不需要执行任何操作。

场景 3

方案 3 的两个变体中的问题已按如下方式解决:Exchange Online 中的 MRS 将 ArchiveDomain 属性的值设置为本地域。 因此,用户可以在 Outlook 或 Outlook Web App中正确访问其存档邮箱,而不会发生任何错误。 不需要执行任何操作。

场景 4

方案 4 中的问题已按如下方式解决:在此方案中,Exchange Online 中的 MRS 将 ArchiveDomain 属性的值设置为本地域。 因此,即使未启用存档邮箱,用户也会在 Outlook 中看到存档邮箱的存在。 此存档类似于方案 1 中提到的“解决方法”部分的“虚影存档”。 但是,存档仍要求本地Exchange Server环境的 Exchange 管理员运行“方案 5 的解决方法”部分中提供的脚本。 Microsoft 部署了一个更新来解决此问题。 因此,将来的退会不会受到影响。

若要确定从Exchange Online执行卸载迁移时是否受到影响,请在扫描模式下运行“方案 5 的解决方法”部分提供的脚本。

方案 5

在此方案中,ArchiveDomain 属性的值设置为本地域。 因此,Outlook 无法找到并打开存档邮箱。

为了解决方案 4 和 5 的问题,Microsoft 提供了以下脚本来帮助在将邮箱从Exchange Online移回本地Exchange Server环境时自动更改必要的属性。 若要运行脚本,请执行以下步骤:

  1. 启动记事本。
  2. 将以下脚本复制并粘贴到记事本中:
#-------------------------------------------------------------------------------
#
# Copyright (c) Microsoft Corporation. All rights reserved.
#
# PLEASE NOTE:
# Microsoft Corporation (or based on where you live, one of its affiliates)
# licenses this supplement to you. You may use it with each validly licensed
# copy of Microsoft Online Services Migration Tools software (the "software").
# You may not use the supplement if you do not have a license for the software.
# The license terms for the software apply to your use of this supplement.
# Microsoft may provide support services for the supplement as described at
# http://www.support.microsoft.com/common/international.aspx.
#
#-------------------------------------------------------------------------------
#
# PowerShell Source Code
#
param([Parameter(Mandatory = $false)]
[string]$TenantCloudDomain,
[Parameter(Mandatory = $false)]
[string]$Domain,
[Parameter(Mandatory = $false)]
[Switch]$Fix,
[Parameter(Mandatory = $false)]
[Switch]$FindAllUsersInForest
)
function GetNameFromDN([string]$dn)
{
if ($dn.Length -eq 0) { return $null; }
return ($dn -split ",")[0].Replace("CN=", "")
}
Import-Module ActiveDirectory
If ($TenantCloudDomain.Length -eq 0) {
$ldapQuery = "(&(objectClass=user)(msExchArchiveAddress=*))"
} else {
$ldapQuery = "(&(objectClass=user)(msExchArchiveAddress=*)(!(&(msExchArchiveGuid=*)(!(msExchArchiveDatabaseLink=*))(msExchArchiveAddress=$TenantCloudDomain))))"
}
if ($Domain.Length -eq 0) {
# default domain to computer's domain
$computer = Get-WmiObject -Class Win32_ComputerSystem
$Domain = $computer.Domain
}
if ($FindAllUsersInForest -and $Fix) {
throw "You cannot specify -FindAllUsersInForest when running in -Fix mode, only one domain can be cleaned up at a time."
}
Write-Host "Looking for objects to clean up in ${Domain}: ${ldapQuery}"
$propertiesToLoad = @("msExchMailboxGuid","homeMDB","msExchArchiveGuid","msExchArchiveDatabaseLink","msExchArchiveAddress")
$tsStart = [DateTime](Get-Date)
if ($FindAllUsersInForest) {
$m = Get-ADObject -Server "${Domain}:3268" -SearchBase "" -LDAPFilter $ldapQuery -ResultSetSize $null -Properties $propertiesToLoad
} else {
$m = Get-ADObject -Server $Domain -LDAPFilter $ldapQuery -ResultSetSize $null -Properties $propertiesToLoad
}
$elapsed = [DateTime](Get-Date) - $tsStart
if ($m -eq $null) {
Write-Host "No objects need to be cleaned up."
return
}
$cleanedCount = 0
$failedCount = 0
$filename = $("~\ArchiveDomainCleanup_{0:yyyymmdd_HHmmss}.csv" -f (Get-Date))
# Run cleanup and output data to CSV file
Write-Host "Writing output to $filename..."
try {
$m | %{
$success = $true
if ($Fix) {
$prevError = $error[0]
Set-ADObject -Identity $_ -Server $Domain -Clear "msExchArchiveAddress"
if ($error[0] -ne $prevError) {
$success = $false
Write-Host "x" -NoNewLine
} else {
Write-Host "." -NoNewLine
}
}
if ($success) {
$cleanedCount++
# object was cleaned up successfully, let's append it to output CSV.
$mm = $_ | Select ObjectGuid,DistinguishedName
# Morph guid values from binary blob to proper guid
$mbxGuid = [Guid]$_.msExchMailboxGuid
if ($_.msExchArchiveGuid -ne $null) {
$archiveGuid = [Guid]$_.msExchArchiveGuid
} else {
$archiveGuid = $null
}
Add-Member -InputObject $mm -MemberType NoteProperty -Name CleanedArchiveDomain -Value $($_.msExchArchiveAddress)
Add-Member -InputObject $mm -MemberType NoteProperty -Name ExchangeGuid -Value $mbxGuid
Add-Member -InputObject $mm -MemberType NoteProperty -Name Database -Value $(GetNameFromDN $_.homeMDB)
Add-Member -InputObject $mm -MemberType NoteProperty -Name ArchiveGuid -Value $archiveGuid
Add-Member -InputObject $mm -MemberType NoteProperty -Name ArchiveDatabase -Value $(GetNameFromDN $_.msExchArchiveDatabaseLink)
$mm
} else {
$failedCount++
}
} | Export-CSV $filename -NoTypeInformatio
}
finally {
if ($Fix) {
Write-Host ""
Write-Host "Cleaned up $cleanedCount recipients."
if ($failedCount -gt 0) {
Write-Warning "Failed to update $failedCount recipients."
}
} else {
Write-Host "Discovered $cleanedCount recipients."
}
}
  1. 在“文件”菜单上,单击“保存”
  2. “另存为类型 ”框中,单击“ 所有文件” (.)
  3. 在“ 文件名 ”框中,typeCleanup-ArchiveDomain.ps1,然后单击“ 保存”。
  4. 找到保存 Cleanup-ArchiveDomain.ps1 文件的目录,然后运行脚本以及以下参数:
Cleanup-ArchiveDomain.ps1 [-TenantCloudDomain serviceDomain] [-Domain domain] [-Fix] [-FindAllUsersInForest]

注意

  • 仅当租户使用云存档功能时,才应指定 TenantCloudDomain 参数。 参数的值应该是租户用于访问云存档的 DNS 域名,例如 contoso.com。
  • Domain 参数用于在非当前计算机域的域中运行清理功能。
  • “修复”开关触发实际清理功能。 开关 (也称为“扫描模式”) 的默认功能只是查找用户,然后将其输出到 CSV 文件。
  • TheFindAllUsersInForest 开关搜索全局目录,并查找本地林 (跨所有域) 的所有受影响的用户。 但是,此开关不能与修复开关结合使用。 一次只能修复一个域中的用户。

更多信息

仍然需要帮助? 请转到 Microsoft 社区