使用 PowerShell 移动邮箱

除了 Exchange 管理员 Center (EAC) 外,还可以使用 PowerShell 移动邮箱。

将本地邮箱移动到Exchange Online组织

若要使用 PowerShell 将本地邮箱移动到Exchange Online,请执行以下步骤:

  1. 连接到 Exchange Online PowerShell:以管理员身份启动 PowerShell,并通过运行以下命令连接到 Exchange Online PowerShell

    PS C:\> Connect-ExchangeOnline
    
  2. 查找迁移终结点远程服务器 URL:使用 Get-MigrationEndpoint cmdlet 获取远程服务器 URL。

    Get-MigrationEndpoint | Format-List Identity, RemoteServer
    

    将显示以下输出:

    PS C:\> Get-MigrationEndpoint | Format-List Identity, RemoteServer
    
    Identity     : Hybrid Migration Endpoint - EWS (Default Web Site)
    RemoteServer : <GUID>.resource.mailboxmigration.his.msappproxy.net
    

    注意

    上述命令语法输出中的 RemoteServer 值是通过运行 混合配置向导 (HCW) 生成的。

  3. 在下一部分中根据需要复制 RemoteServer 值。

    注意

    当用户在“混合拓扑”页中选择“使用 Exchange 新式混合拓扑”时,将生成上述输出命令语法中显示的 RemoteServer 值。

  4. 使用 PowerShell 创建新的移动请求以将主邮箱和存档邮箱移动到Exchange Online

    • 填写以下详细信息以创建新的移动请求,将主邮箱和存档邮箱移动到Exchange Online:

      • 标识:邮箱名称或电子邮件地址。
      • RemoteHostName:在步骤 2 中复制的远程服务器。
      • TargetDeliveryDomain:用于Exchange Online组织邮箱的主 SMTP 域。
      • RemoteCredential:具有特权的本地管理员帐户。

      运行 命令后,将显示凭据登录请求。

      New-MoveRequest -Identity "Maisha.Lee@contoso.com" -Remote -RemoteHostName "mail.contoso.com" -TargetDeliveryDomain "<domain>.mail.onmicrosoft.com" -RemoteCredential (Get-Credential)
      
    • (RemoteCredential) 填写本地凭据的密码。

  5. 使用 PowerShell 将多个邮箱移动到Exchange Online

    • 创建名为 Users.csv 的 CSV 文件,并将其置于 C:\migration 目录中。

    • 打开 CSV 文件,将标题列命名为 EmailAddress,并填写要移动到Exchange Online的所有邮箱。

      显示输入要移动的邮箱详细信息的 CSV 的屏幕截图。

    • 复制以下脚本并更改前 3 行。 之后,运行脚本。

      $Mailboxes = Import-Csv "C:\Migration\Users.csv"
      $RemoteHostName = "mail.contoso.com"
      $TargetDeliveryDomain = "<domain>.mail.onmicrosoft.com"
      $OnPremCred = (Get-Credential)
      
      # Move mailboxes in CSV file to Exchange Online
      foreach ($Mailbox in $Mailboxes) {
      $params = @{
      Identity               = $mailbox.EmailAddress
      Remote                 = $true
      RemoteHostName         = $RemoteHostName
      TargetDeliveryDomain   = $TargetDeliveryDomain
      RemoteCredential       = $OnPremCred
             }
      
      New-MoveRequest @params
      
         }
      
  6. 使用 PowerShell 仅将主邮箱移动到Exchange Online

    存在这样一种情况:存档邮箱位置位于 Exchange Online 主邮箱位置位于 Exchange 本地,并运行以下命令:

    $Mailboxes = Import-Csv "C:\Migration\Users.csv"
    $RemoteHostName = "mail.contoso.com"
    $TargetDeliveryDomain = "<domain>.mail.onmicrosoft.com"
    $OnPremCred = (Get-Credential)
    
    # Move mailboxes in CSV file to Exchange Online
    foreach ($Mailbox in $Mailboxes) {
    $params = @{
    Identity               = $mailbox.EmailAddress
    Remote                 = $true
    RemoteHostName         = $RemoteHostName
    TargetDeliveryDomain   = $TargetDeliveryDomain
    RemoteCredential       = $OnPremCred
           }
    
    New-MoveRequest @params
    
       }
    

    结果是收到以下错误消息,这是错误消息后面显示的更大命令语法的一部分:

    You must specify the PrimaryOnly parameter
    Target user ‘XXXXXX’ already has an archive mailbox.
    
    PS C:\> New-MoveRequest -Identity "Maisha.Lee@contoso.com" -Remote -RemoteHostName "mail.contoso.com" -TargetDeliveryDomain "<domain>.mail.onmicrosoft.com" -RemoteCredential (Get-Credential)
    You must specify the PrimaryOnly parameter.
    Target user 'Maisha Lee' already has an archive mailbox.
    + CategoryInfo          : NotSpecified: (:) [New-MoveRequest], MailboxReplicationPermanentException
    + FullyQualifiedErrorId : [Server=PAXP190MB1743,RequestId=3f8179c3-aa93-453f-9e14-d824968f34c4,TimeStamp=5/28/2022
    7:19:13 AM] [FailureCategory=Cmdlet-MailboxReplicationPermanentException] FE8B9422,Microsoft.Exchange.Management.
    Migration.MailboxReplication.MoveRequest.NewModernMoveRequest
    + PSComputerName        : outlook.office365.com
    

    看到错误消息后,请执行以下步骤:

    • -PrimaryOnly将 参数添加到前面的命令语法中,以解决在创建新的移动请求以仅将主邮箱移动到Exchange Online时出现的错误。

    • 填写以下详细信息:

      • 标识:邮箱名称或电子邮件地址。
      • RemoteHostName:在步骤 2 中复制的远程服务器。
      • PrimaryOnly:将值保留为空。
      • TargetDeliveryDomain:用于Exchange Online组织邮箱的主 SMTP 域。
      • RemoteCredential:具有特权的本地管理员帐户。

      为新的移动请求运行 命令后,将显示凭据登录请求,如以下命令语法所示:

      New-MoveRequest -Identity "Maisha.Lee@contoso.com" -Remote -RemoteHostName "mail.contoso.com" -PrimaryOnly -TargetDeliveryDomain "<domain>.mail.onmicrosoft.com" -RemoteCredential (Get-Credential)
      
    • (RemoteCredential) 填写本地凭据的密码。

  7. 使用 PowerShell 仅将存档邮箱移动到Exchange Online

    PS C:\> New-MoveRequest -Identity "Maisha.Lee@contoso.com" -Remote -RemoteHostName "mail.contoso.com" -TargetDeliveryDomain "<domain>.mail.onmicrosoft.com" -RemoteCredential (Get-Credential)
    You must specify the PrimaryOnly parameter.
    Target user 'Maisha Lee' already has an archive mailbox.
    + CategoryInfo          : NotSpecified: (:) [New-MoveRequest], MailboxReplicationPermanentException
    + FullyQualifiedErrorId : [Server=PAXP190MB1743,RequestId=3f8179c3-aa93-453f-9e14-d824968f34c4,TimeStamp=5/28/2022
    7:19:13 AM] [FailureCategory=Cmdlet-MailboxReplicationPermanentException] FE8B9422,Microsoft.Exchange.Management.
    Migration.MailboxReplication.MoveRequest.NewModernMoveRequest
    + PSComputerName        : outlook.office365.com
    
    • ArchiveOnly将 参数添加到前面的命令语法中,以解决在创建新的移动请求以仅将存档邮箱移动到Exchange Online时的错误。
    • 填写以下详细信息:
      • 标识:邮箱名称或电子邮件地址。
      • RemoteHostName:在步骤 2 中复制的远程服务器。
      • ArchiveOnly:将值保留为空。
      • TargetDeliveryDomain:用于Exchange Online组织邮箱的主 SMTP 域。
      • RemoteCredential:具有特权的本地管理员帐户。

    为新的移动请求运行 命令后,将显示凭据登录请求,如以下命令语法所示:

    New-MoveRequest -Identity "Maisha.Lee@contoso.com" -Remote -RemoteHostName "mail.contoso.com" -ArchiveOnly -TargetDeliveryDomain "<domain>.mail.onmicrosoft.com" -RemoteCredential (Get-Credential)
    

    (RemoteCredential) 填写本地凭据的密码。

  8. 获取邮箱移动状态

    • 使用 Get-MoveRequest cmdlet 获取邮箱移动请求的状态。

      Get-MoveRequest -Identity "Maisha.Lee@contoso.com" | Get-MoveRequestStatistics
      
    • 运行以下命令以获取所有邮箱移动请求:

      Get-MoveRequest | Get-MoveRequestStatistics
      

      输出将邮箱移动状态显示为 “已完成” 状态,如以下屏幕截图所示:

      显示允许用户获取邮箱移动状态的命令的屏幕截图。

      如果情况并非如此,并且无法完成邮箱移动请求,则可以暂停并恢复移动请求。

将Exchange Online邮箱移动到本地组织

若要使用 PowerShell 将Exchange Online邮箱移动到本地组织,请执行以下步骤:

  1. 连接到 Exchange Online PowerShell:以管理员身份启动 PowerShell,并通过运行以下命令连接到 Exchange Online PowerShell

    PS C:\> Connect-ExchangeOnline
    

    注意

    未将Exchange Online邮箱拉取到本地。 事实上,你正在将Exchange Online邮箱推送到本地。 这就是需要连接到 Exchange Online并从 PowerShell Exchange Online 运行命令的原因。

  2. 查找迁移终结点远程服务器 URL:使用 Get-MigrationEndpoint cmdlet 获取远程服务器 URL。

    Get-MigrationEndpoint | Format-List Identity, RemoteServer
    

    将显示以下输出:

    Identity     : Hybrid Migration Endpoint - EWS (Default Web Site)
    RemoteServer : mail.contoso.com
    

    注意

    上述命令语法输出中的 RemoteServer 值是通过运行 混合配置向导 (HCW) 生成的。

  3. 请复制下一部分中需要的 RemoteServer URL 值。

  4. 创建新的移动请求以使用 PowerShell 从Exchange Online移动主邮箱和存档邮箱

    • 在创建新移动请求以从Exchange Online移动主邮箱和存档邮箱时填写以下详细信息:

      • 标识:邮箱名称或电子邮件地址。
      • RemoteTargetDatabase:Exchange 本地邮箱数据库。
      • RemoteHostName:在步骤 2 中复制的远程服务器。
      • TargetDeliveryDomain:用于Exchange Online组织邮箱的主 SMTP 域。
      • RemoteCredential:具有特权的本地管理员帐户。

      要运行以创建新的移动请求的命令是:

      New-MoveRequest -OutBound -RemoteTargetDatabase "DB01" -RemoteHostName "mail.contoso.com" -TargetDeliveryDomain "contoso.com" -RemoteCredential (Get-Credential)
      
    • 为凭据登录请求填写本地凭据的密码 (RemoteCredential) ,该请求在运行命令后,如以下命令语法所示:

      PS C:\> Get-Mailbox -Identity "Jordy.Twin@contoso.com" | New-MoveRequest -OutBound -RemoteTargetDatabase "DB01" -RemoteHostName "mail.contoso.com" -TargetDeliveryDomain "contoso.com" -RemoteCredential (Get-Credential exoip\administrator)
      
      DisplayName Status TargetDatabase
      ----------- ------ --------------
      Jordy Twin  Queued
      

      运行包含本地凭据密码的上述命令后,可能会收到以下错误:

      • 找不到具有邮箱 GUID 的收件人
      • 源和目标收件人上的存档 GUID 不匹配
  5. 使用 PowerShell 仅从Exchange Online移动主邮箱

    • 如果主邮箱和存档邮箱位置位于 Exchange Online,并且你只想移动主邮箱,请将 和 -ArchiveDomain 参数添加到-PrimaryOnly用于创建新移动的命令中,并在命令语法中填写以下详细信息:

      • 标识:邮箱名称或电子邮件地址。
      • OutBound:将值保留为空。
      • RemoteTargetDatabase:Exchange 本地邮箱数据库。
      • RemoteHostName:在步骤 2 中复制的远程服务器。
      • PrimaryOnly:将值保留为空。
      • ArchiveDomain:用于Exchange Online组织邮箱的主 SMTP 域。
      • TargetDeliveryDomain:用于Exchange Online组织邮箱的主 SMTP 域。
      • RemoteCredential:具有特权的本地管理员帐户。

      要运行以创建新的移动请求的命令是:

      New-MoveRequest -OutBound -RemoteTargetDatabase "DB01" -RemoteHostName "mail.contoso.com" -PrimaryOnly -ArchiveDomain "<domain>.mail.onmicrosoft.com" -TargetDeliveryDomain "contoso.com" -RemoteCredential (Get-Credential)
      

      运行 命令后,将显示凭据登录请求,如以下命令语法所示:

      PS C:\> Get-Mailbox -Identity "Jordy.Twin@contoso.com" | New-MoveRequest -OutBound -RemoteTargetDatabase "DB01" -RemoteHostName "mail.contoso.com" -PrimaryOnly -ArchiveDomain "<domain>.mail.onmicrosoft.com" -TargetDeliveryDomain "contoso.com" -RemoteCredential (Get-Credential exoip\administrator)
      
      DisplayName Status TargetDatabase
      ----------- ------ --------------
      Jordy Twin  Queued
      

      (RemoteCredential) 填写本地凭据的密码。

  6. 获取邮箱移动状态

    • 使用 Get-MoveRequest cmdlet 获取邮箱移动请求的状态。

      PS C:\> Get-MoveRequest -Identity "Jordy.Twin@contoso.com" | Get-MoveRequestStatistics | ft DisplayName,StatusDetail,TotalMailboxSize,TotalArchiveSize,PercentComplete
      
      DisplayName StatusDetail TotalMailboxSize             TotalArchiveSize PercentComplete
      ----------- ------------ ----------------             ---------------- ---------------
      Jordy Twin  Completed    231.6 MB (242,877,775 bytes) 0 B (0 bytes)                100
      

      邮箱移动完成。 如果情况并非如此,并且无法完成邮箱移动请求,则可以暂停并恢复移动请求。

若要实现删除已完成的迁移批处理的下一步,请参阅 删除已完成的迁移批处理