Usar o PowerShell para mover caixas de correio

Você pode usar o PowerShell para mover caixas de correio, além do Centro de Administração do Exchange (EAC).

Mover caixas de correio locais para uma organização do Exchange Online

Para mover uma caixa de correio local para o Exchange Online usando o PowerShell, execute as seguintes etapas:

  1. Conecte-se ao Windows PowerShell do Exchange Online: Inicie o PowerShell como administrador e Conecte-se ao PowerShell do Exchange Online executando o seguinte comando:

    PS C:\> Connect-ExchangeOnline
    
  2. Localizar URL do servidor remoto do ponto de extremidade de migração: obtenha a URL do servidor remoto usando o cmdlet Get-MigrationEndpoint .

    Get-MigrationEndpoint | Format-List Identity, RemoteServer
    

    A seguinte saída é exibida:

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

    Observação

    O valor RemoteServer na saída da sintaxe do comando anterior é gerado pela execução do Assistente de Configuração Híbrida (HCW).

  3. Copie o valor RemoteServer conforme necessário na próxima parte.

    Observação

    O valor do RemoteServer exibido na sintaxe de comando de saída anterior é gerado quando o usuário seleciona Usar a Topologia Híbrida Moderna do Exchange na página Topologia Híbrida .

  4. Criar uma nova solicitação de movimentação para mover caixas de correio principais e de arquivo morto para o Exchange Online usando o PowerShell

    • Preencha os seguintes detalhes para criar uma nova solicitação de movimentação para mover a caixa de correio principal e a caixa de correio de arquivo morto para o Exchange Online:

      • Identidade: nome da caixa de correio ou endereço de email.
      • RemoteHostName: o servidor remoto que você copiou na Etapa 2.
      • TargetDeliveryDomain: domínio SMTP primário usado para as caixas de correio da organização do Exchange Online.
      • RemoteCredential: conta de administrador local com privilégios.

      Depois de executar o comando, uma solicitação de credencial é exibida.

      New-MoveRequest -Identity "Maisha.Lee@contoso.com" -Remote -RemoteHostName "mail.contoso.com" -TargetDeliveryDomain "<domain>.mail.onmicrosoft.com" -RemoteCredential (Get-Credential)
      
    • Preencha a senha das credenciais locais (RemoteCredential).

  5. Mover várias caixas de correio para o Exchange Online usando o PowerShell

    • Crie um arquivo CSV chamado Users.csv e coloque-o no diretório C:\migration.

    • Abra o arquivo CSV, nomeie a coluna de cabeçalho como EmailAddress e preencha todas as caixas de correio que você deseja mover para o Exchange Online.

      Captura de tela que mostra o CSV no qual os detalhes das caixas de correio a serem movidas são inseridos.

    • Copie o script a seguir e altere as três primeiras linhas. Depois disso, execute o script.

      $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. Mover somente a caixa de correio principal para o Exchange Online usando o PowerShell

    Há um cenário em que o local da caixa de correio de arquivo morto está no Exchange Online e o local da caixa de correio principal está no Exchange local, e você executa o seguinte comando:

    $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
    
       }
    

    O resultado é que você recebe a seguinte mensagem de erro, que faz parte da sintaxe de comando maior mostrada após a mensagem de erro:

    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
    

    Quando você vir a mensagem de erro, execute as seguintes etapas:

    • Adicione o -PrimaryOnly parâmetro à sintaxe do comando anterior para resolver o erro ao criar uma nova solicitação de movimentação para mover a caixa de correio principal apenas para o Exchange Online.

    • Preencha os seguintes detalhes:

      • Identidade: nome da caixa de correio ou endereço de email.
      • RemoteHostName: o servidor remoto que você copiou na Etapa 2.
      • PrimaryOnly: mantém o valor vazio.
      • TargetDeliveryDomain: domínio SMTP primário usado para as caixas de correio da organização do Exchange Online.
      • RemoteCredential: conta de administrador local com privilégios.

      Depois de executar o comando para uma nova solicitação de movimentação, uma solicitação de entrada de credencial é exibida, conforme mostrado na seguinte sintaxe de comando:

      New-MoveRequest -Identity "Maisha.Lee@contoso.com" -Remote -RemoteHostName "mail.contoso.com" -PrimaryOnly -TargetDeliveryDomain "<domain>.mail.onmicrosoft.com" -RemoteCredential (Get-Credential)
      
    • Preencha a senha das credenciais locais (RemoteCredential).

  7. Mover apenas a caixa de correio de arquivo morto para o Exchange Online usando o PowerShell

    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
    
    • Adicione o ArchiveOnly parâmetro à sintaxe do comando anterior para resolver o erro ao criar uma nova solicitação de movimentação para mover a caixa de correio de arquivo morto apenas para o Exchange Online.
    • Preencha os seguintes detalhes:
      • Identidade: nome da caixa de correio ou endereço de email.
      • RemoteHostName: o servidor remoto que você copiou na Etapa 2.
      • ArchiveOnly: mantém o valor vazio.
      • TargetDeliveryDomain: domínio SMTP primário usado para as caixas de correio da organização do Exchange Online.
      • RemoteCredential: conta de administrador local com privilégios.

    Depois de executar o comando para uma nova solicitação de movimentação, uma solicitação de entrada de credencial é exibida, conforme mostrado na seguinte sintaxe de comando:

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

    Preencha a senha das credenciais locais (RemoteCredential).

  8. Obter status de movimentação de caixa de correio

    • Obtenha o status da solicitação de movimentação da caixa de correio usando o cmdlet Get-MoveRequest.

      Get-MoveRequest -Identity "Maisha.Lee@contoso.com" | Get-MoveRequestStatistics
      
    • Execute o seguinte comando para obter todas as solicitações de movimentação de caixa de correio:

      Get-MoveRequest | Get-MoveRequestStatistics
      

      A saída mostra o status de movimentação da caixa de correio como status Concluído, conforme mostrado na captura de tela a seguir:

      Captura de tela que mostra o comando que permite ao usuário obter o status de movimentação da caixa de correio.

      Se esse não for o caso e você não puder concluir a solicitação de movimentação da caixa de correio, poderá suspender e retomar a solicitação de movimentação.

Mover caixas de correio do Exchange Online para uma organização local

Para mover uma caixa de correio do Exchange Online para a organização local usando o PowerShell, execute as seguintes etapas:

  1. Conecte-se ao Windows PowerShell do Exchange Online: Inicie o PowerShell como administrador e Conecte-se ao PowerShell do Exchange Online executando o seguinte comando:

    PS C:\> Connect-ExchangeOnline
    

    Observação

    Você não está efetuando pull da caixa de correio do Exchange Online para o local. Na verdade, você está enviando a caixa de correio do Exchange Online para o local. É por isso que você precisa se conectar ao Exchange Online e executar os comandos do Exchange Online PowerShell.

  2. Localizar URL do servidor remoto do ponto de extremidade de migração: obtenha a URL do servidor remoto usando o cmdlet Get-MigrationEndpoint .

    Get-MigrationEndpoint | Format-List Identity, RemoteServer
    

    A seguinte saída é exibida:

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

    Observação

    O valor RemoteServer na saída da sintaxe do comando anterior é gerado pela execução do Assistente de Configuração Híbrida (HCW).

  3. Copie o valor da URL do RemoteServer conforme necessário na próxima parte.

  4. Criar uma nova solicitação de movimentação para mover caixas de correio principais e de arquivo morto do Exchange Online usando o PowerShell

    • Preencha os seguintes detalhes como parte da criação de uma nova solicitação de movimentação para mover a caixa de correio principal e a caixa de correio de arquivo morto do Exchange Online:

      • Identidade: nome da caixa de correio ou endereço de email.
      • RemoteTargetDatabase: banco de dados de caixa de correio local do Exchange.
      • RemoteHostName: o servidor remoto que você copiou na Etapa 2.
      • TargetDeliveryDomain: domínio SMTP primário usado para as caixas de correio da organização do Exchange Online.
      • RemoteCredential: conta de administrador local com privilégios.

      O comando a ser executado para criar uma nova solicitação de movimentação é:

      New-MoveRequest -OutBound -RemoteTargetDatabase "DB01" -RemoteHostName "mail.contoso.com" -TargetDeliveryDomain "contoso.com" -RemoteCredential (Get-Credential)
      
    • Preencha a senha das credenciais locais (RemoteCredential) para a solicitação de entrada de credencial exibida, conforme mostrado na seguinte sintaxe de comando depois que o comando é executado:

      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
      

      Depois de executar o comando anterior que inclui a senha das credenciais locais, você poderá obter os seguintes erros:

      • Não é possível encontrar um destinatário que tenha GUID de caixa de correio
      • Os GUIDs de arquivo morto nos destinatários de origem e destino não correspondem
  5. Mover apenas a caixa de correio principal do Exchange Online usando o PowerShell

    • Se os locais da caixa de correio principal e da caixa de correio de arquivo morto estiverem no Exchange Online e você quiser mover apenas a caixa de correio principal, adicione -PrimaryOnly parâmetros and -ArchiveDomain ao comando que você executa para criar uma nova movimentação e, na sintaxe do comando, preencha os seguintes detalhes:

      • Identidade: nome da caixa de correio ou endereço de email.
      • OutBound: mantém o valor vazio.
      • RemoteTargetDatabase: banco de dados de caixa de correio local do Exchange.
      • RemoteHostName: o servidor remoto que você copiou na Etapa 2.
      • PrimaryOnly: mantém o valor vazio.
      • ArchiveDomain: domínio SMTP primário usado para as caixas de correio da organização do Exchange Online.
      • TargetDeliveryDomain: domínio SMTP primário usado para as caixas de correio da organização do Exchange Online.
      • RemoteCredential: conta de administrador local com privilégios.

      O comando a ser executado para criar uma nova solicitação de movimentação é:

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

      Depois de executar o comando, uma solicitação de entrada de credencial é exibida conforme mostrado na seguinte sintaxe de comando:

      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
      

      Preencha a senha das credenciais locais (RemoteCredential).

  6. Obter status de movimentação de caixa de correio

    • Obtenha o status da solicitação de movimentação da caixa de correio usando o cmdlet Get-MoveRequest.

      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
      

      A movimentação da caixa de correio é concluída. Se esse não for o caso e você não puder concluir a solicitação de movimentação da caixa de correio, poderá suspender e retomar a solicitação de movimentação.

Para implementar a próxima etapa de remoção dos lotes migrados concluídos, consulte Remover lotes de migração concluídos.