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