迁移至 Microsoft 365 的邮箱的存档邮箱问题
原始 KB 数: 2757430
问题
将邮箱迁移到 Microsoft 365 或使用存档邮箱时,遇到Microsoft Exchange Online 中的 Microsoft Exchange 邮箱复制服务(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 环境时自动更改必要的属性。 若要运行该脚本,请执行以下步骤:
- 启动记事本。
- 在记事本中复制并粘贴以下脚本:
#-------------------------------------------------------------------------------
#
# 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."
}
}
- 在“文件”菜单上,单击“保存”。
- 在“另存为类型”框中,单击“所有文件”。。
- 在 “文件名 ”框中,键入Cleanup-ArchiveDomain.ps1,然后单击“ 保存”。
- 找到保存 Cleanup-ArchiveDomain.ps1 文件的目录,然后结合以下参数运行脚本:
Cleanup-ArchiveDomain.ps1 [-TenantCloudDomain serviceDomain] [-Domain domain] [-Fix] [-FindAllUsersInForest]
注意
- 仅当租户使用云存档功能时,才应指定 TenantCloudDomain 参数。 参数的值应该是租户用于访问云存档的 DNS 域名,例如 contoso.com。
- Domain 参数用于在不是当前计算机的域的域中运行清理功能。
- 修复开关触发实际的清理功能。 开关(也称为“扫描模式”)的默认功能只是查找用户,然后将其输出到 CSV 文件。
- TheFindAllUsersInForest 开关搜索全局目录,并查找本地林中的所有受影响的用户(跨所有域)。 但是,此开关不能与修复开关结合使用。 一次只能修复一个域中的用户。
更多信息
仍然需要帮助? 请转到 Microsoft 社区。