如何將信箱從一個 Microsoft 365 或 Office 365 組織移轉到另一個

注意事項

目前,原始跨租用戶信箱移轉的公開預覽位於 https://aka.ms/CrossTenantMailboxMigration

本文說明如何在企業合併案例中,將信箱和服務設定從一個 Microsoft 365 或 Office 365 組織移轉至另一個 Microsoft 365 或 Office 365 組織。 如果您有超過 500 位使用者要移轉或移轉大量 SharePoint 數據,建議您與 Microsoft 解決方案提供者合作。

本文中的案例是以兩家虛構公司為基礎-Contoso.com 和 Fabrikam.com-使用兩個不同的 Office 365 組織。 Contoso 已購買 Fabrikam,並將 Fabrikam 使用者和數據移至 contoso.com Office 365組織。

網域 租用戶 1 (目標) 租用戶 2 (來源)
自訂電子郵件網域: contoso.com fabrikam.com
Office 365 初始網域: contoso.onmicrosoft.com fabrikam.onmicrosoft.com

案例:使用協力廠商移轉工具進行移轉

此案例假設 Fabrikam 公司中的使用者、群組和其他物件會在 Office 365 中手動建立、透過腳本匯入入口網站,或透過 Active Directory 網域服務 (AD DS 合併合併到 Contoso Active Directory) 。

完成時,所有 Fabrikam 帳戶都會存在於 Contoso.com Office 365組織中,而且全都會用於 @fabrikam.com UPN。 選擇最終定址配置的依據是簡潔明瞭,但當然也可以針對您的需求進行修改。

如何將信箱資料從一個 Microsoft 365 或 Office 365 組織移轉到另一個。

計劃:移轉前的兩週

如果使用協力廠商移轉工具移轉使用者,請購買您移轉所需的授權。

用戶端考量

針對 Outlook 2010 或以上版本,您只需要移除 Outlook 使用者設定檔重新加以建立

針對 Outlook 2007 和 Outlook 2010,當您重新啟動用戶端時,自動探索會設定用戶端並重建 。OST 檔案。

針對 商務用 Skype 客戶端,移轉完成後,由於此程式會建立新的配置檔,因此您需要新增聯繫人

租用戶準備和授權

來源租使用者是 Fabrikam Office 365 組織,您要從中移轉用戶和數據。 目標租使用者是您要移轉的 Contoso Office 365 組織。

  1. 在目標 Office 365 組織增加授權,以容納從來源租用戶所移轉來的所有信箱。

  2. 在來源和目標租用戶中建立系統管理員帳戶,以用於從 Office 365 移轉至另一個 Office 365。 部分移轉工具在來源租用戶中需要多個系統管理員帳戶,才能將資料輸送量最佳化。

目標租用戶中的會議室、資源、通訊群組和使用者物件建立

在目標 (Contoso) 租用戶中建立資源:

  1. 如果 Azure AD Connect 工具將用於同步處理 Active Directory Domain Services (AD DS) 的所有物件,則必須透過彙總以在目標租用戶 (Contoso) 中建立來源 (Fabrikam) 租用戶 AD DS 的物件。

    1. AD DS 彙總可以使用各種不同的 AD DS 工具完成。 視移動的物件數量而定,彙總可能需要花上額外時間,且可能需要另外規劃,所以可以在移轉專案之前完成。

    2. 確認已透過目錄同步作業將所有新使用者和群組同步處理至 Contoso.com 目標租用戶。 對象應該會在新租用戶中顯示為 user@contoso.onmicrosoft.com ,因為目前尚未移動 Fabrikam 網域。 使用者與群組的主要電子郵件地址可以在網域移動完成後更新為 @fabrikam.com 。

  2. 如果不會使用目錄同步處理,或在來源租使用者的 Microsoft 365 系統管理中心 中管理任何會議室、資源、群組或使用者,則必須在目標租使用者中建立這些物件。 物件可於 Microsoft 365 系統管理中心中手動建立,或者,若是數量龐大,可使用 Microsoft 365 系統管理中心的大量新增功能,或使用 Windows PowerShell 來匯入 CSV 檔案。

使用者通訊

就組織中的使用者移轉作業進行溝通:

  1. 建立通訊計劃,並開始通知使用者有關即將進行的移轉和服務變更。

  2. 移轉之後,將需要清除所有 Outlook 用戶端上的自動完成清單 (也稱為暱稱快取)。 若要從 Outlook 2010 或更新版本的自動完成清單移除所有收件者,請參閱使用 [自動完成] 管理 [收件者]、[副本] 和 [密件副本] 方塊中的建議收件者

  3. 讓用戶瞭解如何使用新登入資訊連線到先前稱為 Outlook Web App) 的 Outlook 網頁版 (,以防移轉後發生問題。

準備及預先移轉活動:移轉前三天

網域準備

若要準備網域進行移轉,請完成下列步驟。

  1. 在 Fabrikam.com 電子郵件網域的目標 (Contoso) 租用戶上,開始網域驗證程序。

  2. 在 Contoso.com Microsoft 365 系統管理中心新增 Fabrikam.com 網域,並在網域名稱系統 (DNS) 建立 TXT 記錄以供驗證。

    注意事項

    因為仍在其他租用戶中使用該網域,所以驗證將會失敗。

    執行此步驟現在可讓 DNS 記錄時間傳播,因為最多可能需要 72 小時。 最終驗證會在稍後的程序中進行。

移轉排程

排程移轉:

  1. 建立您想要移轉的主要使用者信箱清單。

  2. 為您使用的第三方移轉工具建立信箱對應 .CSV 檔案。 移轉時,移轉工具將會使用此對應檔案來比對來源信箱與目標租用戶信箱。 建議您使用 *.onmicrosoft.com 'initial' 網域來對應來源帳戶,因為自定義電子郵件網域將會不斷變更

用於將信箱資料從某個 Office 365 組織移轉至另一個組織的 CSV 檔案。

郵件交換程式記錄 (MX 記錄) 存留時間 (TTL) 測試

接下來,您將會排程 TTL 測試。

  1. 在 DNS 中,針對您要轉移的主要電子郵件網域將 MX 記錄上的 TTL 值變更為較小的數值 (亦即 5 分鐘)。 如果 TTL 無法降低為 5 分鐘,請記下最低值。 例如,如果最低值為 4 小時,則必須在移轉開始前 4 小時變更 MX 記錄。

  2. MX 查閱可以用來驗證 MX 和 DNS 變更。

停用來源租用戶中的目錄同步作業

在來源租用戶 Microsoft 365 系統管理中心,停用目錄同步處理。此程序可能需要 24 小時或以上,因此必須在移轉之前完成。 在入口網站中停用之後,來源租用戶 AD DS 的任何變更將不再同步處理至 Office 365 組織。 據此調整現有使用者和群組佈建程序。

移轉:移轉當天

這些是您在執行移轉當天需要執行的步驟。

MX 記錄變更 - 停止輸入郵件流程

將主要 MX 記錄從 Office 365 變更為無法連線的網域,也就是「unreachable.example.com」。 嘗試傳送新郵件的網際網路郵件伺服器會將郵件排入佇列,並嘗試在 24 小時內重新傳送。 視嘗試傳送電子郵件的伺服器而定,利用這個方法,某些電子郵件可能會傳回未送達報告 (NDR)。 如果發生此問題,請使用 MX 記錄備份服務。 有許多第三方服務會將您的電子郵件排入佇列數天或數周。 移轉完成後,這些服務會將已排入佇列的郵件傳遞給新的 Office 365 組織。

提示

如果您的 TTL 很短,比如五分鐘,此步驟可在工作日結束之時完成,以造成較少的干擾。 如果您有較大的 TTL,您必須先在允許 TTL 到期的時間前變更 MX 記錄。 例如,如果您計劃要在下午 6 點開始移轉,四小時的 TTL 必須在下午 2 點前變更。

視需要確認您的 MX 和 DNS 變更。 Nslookup 或服務,例如 MxToolbox 可以用來驗證 MX 和 DNS 變更。

來源租用戶準備

主要電子郵件網域 fabrikam.com 必須從來源租用戶中的所有物件中移除,網域才可以移動至目標租用戶。

  1. 如果您的網域也已設為用於您的 SharePoint Online 公用網站,那麼您必須先將網站的 URL 設回初始網域,才能將網域移除。

  2. 使用 Lync 系統管理入口網站移除來源租用戶中使用者的所有 Lync 授權。 這會移除連線到 Fabrikam.com 的 Lync Sip 位址。

  3. 將 Office 365 來源信箱上的預設電子郵件地址重設為初始網域 (fabrikam.onmicrosoft.com)。

  4. 將所有散發 清單、會議室和資源上的預設電子郵件位址重設為來源租使用者中初始網域 (fabrikam.onmicrosoft.com) 。

  5. 從仍在使用 @fabrikam.com的用戶物件) 移除所有次要電子郵件 (Proxy 位址。

  6. 將來源租用戶中的預設網域設定為 fabrikam.onmicrosoft.com 路由網域 (在系統管理入口網站中,按一下位於右上角的公司名稱)。

  7. 使用 Windows PowerShell 命令 Get-MsolUser -DomainName Fabrikam.com 來擷取所有仍使用網域並封鎖移除的物件清單。

  8. 針對常見網域移除問題,請參閱當您嘗試從 Office 365 移除網域時收到錯誤訊息

目標租用戶準備

在 contoso.com 租用戶中完成 Fabrikam.com 網域驗證。 將網域從舊的租用戶移除後,您可能需要稍候一個小時。

  1. 將自動探索 CNAME (內部/外部) 設定為選用。

  2. 如果您使用AD FS,請在AD FS的目標租用戶中設定新的網域。

  3. 在 contoso.com 租用戶中開始啟動信箱 > 指派授權給所有新使用者帳戶。

  4. 將 Fabrikam.com 電子郵件網域設定為新使用者的主要位址。 可透過下列方式完成此設定:在入口網站中選取/編輯多個未授權的使用者或使用 Windows PowerShell。

  5. 如果您不是使用密碼哈希同步處理功能、傳遞驗證或 AD FS,請在目標 contoso) 租使用者中的所有信箱上設定密碼 (。 如果您不是使用一般密碼,請通知使用者新密碼。

  6. 信箱授權並啟動後,請轉換郵件路由。 將 Fabrikam MX 記錄指向 Office 365 目標 (Contoso) 租用戶。 當 MX TTL 到期時,郵件會開始流入新的空白信箱。 如果您使用 MX 備份服務,您可以將電子郵件釋出至新的信箱。

  7. 執行進入/離開目標租用戶中新信箱之郵件流程的驗證測試。

  8. 如果您使用 Exchange Online Protection (EOP) :在目標租使用者中,從來源租使用者重新建立郵件流程規則 (也稱為傳輸規則) 、連接器、封鎖清單、允許清單等。

開始移轉

若要將停機以及對使用者造成的不便降到最低,請決定最佳移轉方法。

  • 移轉 500 位或更少的使用者:將郵件行事曆和連絡人資料移轉到目標租用戶信箱。 依日期限制郵件移轉 (如果可以);例如,最後 6 個月的資料。

  • 移轉超過500位使用者:使用多階段方法,讓您移轉聯繫人、行事曆,以及所有使用者只移轉1週的電子郵件,然後在後續的天數或數周執行多個傳遞,以填入具有較舊電子郵件數據的信箱。

透過協力廠商移轉工具開始您的郵件移轉。

  1. 使用廠商所提供的工具監控移轉進度。 在移轉期間傳送定期進度報告給管理和移轉小組。

  2. 執行第二或第三個階段的移轉,所有移轉完成後即為選用。

移轉結束時,Outlook 2007 和 2010 會同步處理每個使用者的整個信箱,耗用的可觀頻寬使用量是根據移轉到每個信箱的資料量而定。 Outlook 2013 預設僅會快取 12 個月的資料。 此設定可設定為較多或較少的資料,例如僅 3 個月的資料,以減輕頻寬使用量。

移轉後工作:清理

回覆已移轉的電子郵件訊息時,使用者可能會接收到 NDR。 必須清除 Outlook 自動完成清單 (也稱為暱稱快取)。 若要從 Outlook 2010 或更新版本的自動完成清單移除所有收件者,請參閱使用 [自動完成] 管理 [收件者]、[副本] 和 [密件副本] 方塊中的建議收件者。 也可以將舊的舊版 DN 以 x.500 Proxy 位址形式新增至所有使用者。

Windows PowerShell 指令碼範例

使用下列 Windows PowerShell 指令碼範例,開始建立您自己的指令碼。

Office 365 大量密碼重設

  1. 建立名稱為 password.csv 的 CSV 檔案。

  2. 在此檔案中插入 「upn」 和 「newpassword」 資料行 (範例: johnsmith@contoso.com、Password1)

  3. 使用 Windows PowerShell 命令:

    Import-Csv password.csv|%{Set-MsolUserPassword -userPrincipalName $_.upn -NewPassword $_.newpassword -ForceChangePassword $false}
    

將具有特定 Proxy 位址的所有 Office 365 帳戶複製至 CSV 檔案

##########################################################################
# Script: showproxies.ps1
# Copies all accounts in Microsoft 365 that contain/don't contain a specific
# proxyaddress to a .CSV file (addresses.csv)
#
# Change the following variable to the proxy address string you want to find:
# $proxyaddr = "onmicrosoft.com"
################################################################################
$proxyaddr = "onmicrosoft.com"
# Create an object to hold the results
$addresses = @()
# Get every mailbox in the Exchange Organization
$Mailboxes = Get-Mailbox -ResultSize Unlimited
# Loop through the mailboxes
ForEach ($mbx in $Mailboxes) {
    # Loop through every address assigned to the mailbox
    Foreach ($address in $mbx.EmailAddresses) {
       # If it contains XXX,  Record it
        if ($address.ToString().ToLower().contains($proxyaddr)) {
            # This is an email address. Add it to the list
            $obj = "" | Select-Object Alias,EmailAddress
            $obj.Alias = $mbx.Alias
            $obj.EmailAddress = $address.ToString() #.SubString(10)
            $addresses += $obj
      }
    }
}
# Export the final object to a csv in the working directory

$addresses | Export-Csv addresses.csv -NoTypeInformation
# Open the csv with the default handler
Invoke-Item addresses.csv

##### END OF SHOWPROXIES.PS1

在 Microsoft 365 中大量建立會議室信箱

注意事項

  • 執行下列腳本之前,您必須先安裝 Exchange Online PowerShell 模組。 如需指示,請參閱安裝和維護 Exchange Online PowerShell 模組。 模組會使用新式驗證。

  • 通常,如果您的組織使用 Microsoft 365 或 Microsoft 365 GCC,您可以使用腳本。 如果您的組織使用 Office 365 德國、Microsoft 365 GCC High 或 Microsoft 365 DoD,您需要在腳本中編輯 Connect-ExchangeOnline 行。 具體來說,針對您的組織類型,您需要使用 ExchangeEnvironmentName 參數和適當的值。 如需詳細資訊,請參閱 連線至 Exchange Online PowerShell 中的範例。

################################################################################
# Script: create-rooms.ps1
# Description:*** RUN THIS SCRIPT FROM A WINDOWS POWERSHELL SESSION ***
# This script creates room mailboxes in Microsoft 365.
# Syntax:Create-Rooms.ps1 -InputFile "file name.csv"
#
# Dependencies: Input file should contain 3 columns: RoomName, RoomSMTPAddress, RoomCapacity
#
################################################################################
param( $inputFile )
Function Usage
{
$strScriptFileName = ($MyInvocation.ScriptName).substring(($MyInvocation.ScriptName).lastindexofany("\") + 1).ToString()
@"
NAME:
$strScriptFileName
EXAMPLE:
C:\PS> .\$strScriptFileName -InputFile `"file name.csv`"
"@
}
If (-not $InputFile) {Usage;Exit}

If ($ExchRemoteCmdlets.State -ne "Opened")
{
Write-Host
Write-Host Connecting to Exchange Online PowerShell...
Write-Host
Import-Module ExchangeOnlineManagement
Connect-ExchangeOnline
$Global:ExchRemoteCmdlets = Get-PSSession -Name ExchangeOnlineInternalSession*
}
# Import the CSV file in Exchange Online
$csv = Import-CSV $inputfile
# Create Rooms contained in the CSV file in Exchange Online
$csv | foreach-object{
New-Mailbox -Name $_.RoomName -Room -PrimarySmtpAddress $_.RoomSMTPAddress -ResourceCapacity $_.RoomCapacity
}
##### END OF CREATE-ROOMS.PS1

大量移除信箱中的次要電子郵件地址

注意事項

  • 執行下列腳本之前,您必須先安裝 Exchange Online PowerShell 模組。 如需指示,請參閱安裝和維護 Exchange Online PowerShell 模組。 模組會使用新式驗證。

  • 通常,如果您的組織使用 Microsoft 365 或 Microsoft 365 GCC,您可以使用腳本。 如果您的組織使用 Office 365 德國、Microsoft 365 GCC High 或 Microsoft 365 DoD,您需要在腳本中編輯 Connect-ExchangeOnline 行。 具體來說,針對您的組織類型,您需要使用 ExchangeEnvironmentName 參數和適當的值。 如需詳細資訊,請參閱 連線至 Exchange Online PowerShell 中的範例。

##########################################################################
#      Script:  remove-proxy.ps1
# Description:*** RUN THIS SCRIPT FROM A WINDOWS POWERSHELL SESSION ***
# This script will remove a secondary email address from many users
#
# Syntax:remove-proxy.ps1 -InputFile "filename.csv"
#
# Dependencies:Input file should contain 2 columns: Username, Emailsuffix
#               Example:  Username=tim, Emailsuffix=fabrikam.com
# Script will remove the address tim@fabrikam.com from the mailbox for Tim.
# NOTE: Address must be secondary; it will not remove primary email address.
#
################################################################################
param( $inputFile )
Function Usage
{
$strScriptFileName = ($MyInvocation.ScriptName).substring(($MyInvocation.ScriptName).lastindexofany
("\") + 1).ToString()
@"
NAME:
$strScriptFileName
EXAMPLE:
C:\PS> .\$strScriptFileName -inputfile `"file name.csv`"
"@
}
If (-not $inputFile) {Usage;Exit}

If ($ExchRemoteCmdlets.State -ne "Opened")
{
Write-Host
Write-Host Connecting to Exchange Online PowerShell...
Write-Host
Import-Module ExchangeOnlineManagement
Connect-ExchangeOnline
$Global:ExchRemoteCmdlets = Get-PSSession -Name ExchangeOnlineInternalSession*
}
# Import the CSV file and change primary smtp address in Exchange Online
$csv = Import-CSV $inputfile
$csv | foreach-object{
# Set variable for email address to remove in Exchange Online
$removeaddr = $_.username + "@" + $_.emailsuffix
Write-Host ("Processing User: " + $_.UserName +" - Removing " + $removeaddr)
Set-Mailbox $_.Username -EmailAddresses @{Remove=$removeaddr}
}
##### END OF REMOVE-PROXY.PS1