Usare PowerShell per spostare le cassette postali

È possibile usare PowerShell per spostare cassette postali, oltre all'interfaccia di amministrazione di Exchange (EAC).

Spostare le cassette postali locali in un'organizzazione di Exchange Online

Per spostare una cassetta postale locale in Exchange Online tramite PowerShell, eseguire i passaggi seguenti:

  1. Connettersi a PowerShell di Exchange Online: Avviare PowerShell come amministratore e connettersi a PowerShell di Exchange Online eseguendo il comando seguente:

    PS C:\> Connect-ExchangeOnline
    
  2. Trovare l'URL del server remoto dell'endpoint di migrazione: ottenere l'URL del server remoto usando il cmdlet Get-MigrationEndpoint .

    Get-MigrationEndpoint | Format-List Identity, RemoteServer
    

    Viene visualizzato l'output seguente:

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

    Nota

    Il valore RemoteServer nell'output della sintassi del comando precedente viene generato eseguendo la procedura guidata di configurazione ibrida (HCW).

  3. Copiare il valore di RemoteServer in base alle esigenze nella parte successiva.

    Nota

    Il valore di RemoteServer visualizzato nella sintassi del comando di output precedente viene generato quando l'utente seleziona Usa topologia ibrida moderna di Exchange nella pagina Topologia ibrida .

  4. Creare una nuova richiesta di spostamento per spostare le cassette postali primarie e di archiviazione in Exchange Online tramite PowerShell

    • Compilare i dettagli seguenti per creare una nuova richiesta di spostamento per spostare la cassetta postale principale e la cassetta postale di archiviazione in Exchange Online:

      • Identità: nome della cassetta postale o indirizzo di posta elettronica.
      • RemoteHostName: il server remoto copiato nel passaggio 2.
      • TargetDeliveryDomain: dominio SMTP primario usato per le cassette postali dell'organizzazione di Exchange Online.
      • RemoteCredential: account amministratore locale con privilegi.

      Dopo aver eseguito il comando, viene visualizzata una richiesta di accesso per le credenziali.

      New-MoveRequest -Identity "Maisha.Lee@contoso.com" -Remote -RemoteHostName "mail.contoso.com" -TargetDeliveryDomain "<domain>.mail.onmicrosoft.com" -RemoteCredential (Get-Credential)
      
    • Immettere la password delle credenziali locali (RemoteCredential).

  5. Spostare più cassette postali in Exchange Online tramite PowerShell

    • Creare un file CSV denominato Users.csv e inserirlo nella directory C:\migration.

    • Aprire il file CSV, assegnare alla colonna di intestazione il nome EmailAddress e inserire tutte le cassette postali che si desidera spostare in Exchange Online.

      Screenshot che mostra il file CSV in cui vengono inseriti i dettagli delle cassette postali da spostare.

    • Copiare lo script seguente e modificare le prime 3 righe. A questo punto, eseguire lo 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. Spostare solo la cassetta postale principale in Exchange Online usando PowerShell

    Esiste uno scenario in cui il percorso della cassetta postale di archiviazione è in Exchange Online e il percorso della cassetta postale principale è in Exchange locale ed è possibile eseguire il comando seguente:

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

    Il risultato è che viene visualizzato il messaggio di errore seguente, che fa parte della sintassi del comando più ampia visualizzata dopo il messaggio di errore:

    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 viene visualizzato il messaggio di errore, esegui i passaggi seguenti:

    • Aggiungere il -PrimaryOnly parametro alla sintassi del comando precedente per risolvere l'errore quando si crea una nuova richiesta di spostamento per spostare la cassetta postale principale solo in Exchange Online.

    • Compila i seguenti dettagli:

      • Identità: nome della cassetta postale o indirizzo di posta elettronica.
      • RemoteHostName: il server remoto copiato nel passaggio 2.
      • PrimaryOnly: mantiene vuoto il valore.
      • TargetDeliveryDomain: dominio SMTP primario usato per le cassette postali dell'organizzazione di Exchange Online.
      • RemoteCredential: account amministratore locale con privilegi.

      Dopo aver eseguito il comando per una nuova richiesta di spostamento, viene visualizzata una richiesta di accesso per le credenziali, come illustrato nella sintassi del comando seguente:

      New-MoveRequest -Identity "Maisha.Lee@contoso.com" -Remote -RemoteHostName "mail.contoso.com" -PrimaryOnly -TargetDeliveryDomain "<domain>.mail.onmicrosoft.com" -RemoteCredential (Get-Credential)
      
    • Immettere la password delle credenziali locali (RemoteCredential).

  7. Spostare solo la cassetta postale di archiviazione in Exchange Online usando 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
    
    • Aggiungere il ArchiveOnly parametro alla sintassi del comando precedente per risolvere l'errore quando si crea una nuova richiesta di spostamento per spostare la cassetta postale di archiviazione solo in Exchange Online.
    • Compila i seguenti dettagli:
      • Identità: nome della cassetta postale o indirizzo di posta elettronica.
      • RemoteHostName: il server remoto copiato nel passaggio 2.
      • ArchiveOnly: mantiene vuoto il valore.
      • TargetDeliveryDomain: dominio SMTP primario usato per le cassette postali dell'organizzazione di Exchange Online.
      • RemoteCredential: account amministratore locale con privilegi.

    Dopo aver eseguito il comando per una nuova richiesta di spostamento, viene visualizzata una richiesta di accesso per le credenziali, come illustrato nella seguente sintassi del comando:

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

    Immettere la password delle credenziali locali (RemoteCredential).

  8. Ottenere lo stato di spostamento della cassetta postale

    • Ottenere lo stato della richiesta di spostamento della cassetta postale usando il cmdlet Get-MoveRequest .

      Get-MoveRequest -Identity "Maisha.Lee@contoso.com" | Get-MoveRequestStatistics
      
    • Eseguire il comando seguente per ottenere tutte le richieste di spostamento della cassetta postale:

      Get-MoveRequest | Get-MoveRequestStatistics
      

      L'output mostra lo stato di spostamento della cassetta postale come Completato , come illustrato nello screenshot seguente:

      Screenshot che mostra il comando che consente all'utente di ottenere lo stato di spostamento della cassetta postale.

      In caso contrario e non è possibile completare la richiesta di spostamento della cassetta postale, è possibile sospendere e riprendere la richiesta.

Spostare le cassette postali di Exchange Online in un'organizzazione locale

Per spostare una cassetta postale di Exchange Online nell'organizzazione locale tramite PowerShell, eseguire la procedura seguente:

  1. Connettersi a PowerShell di Exchange Online: Avviare PowerShell come amministratore e connettersi a PowerShell di Exchange Online eseguendo il comando seguente:

    PS C:\> Connect-ExchangeOnline
    

    Nota

    Non si sta eseguendo il pull della cassetta postale di Exchange Online in locale. In realtà, si sta eseguendo il push della cassetta postale di Exchange Online in locale. Ecco perché è necessario connettersi a Exchange Online ed eseguire i comandi da PowerShell di Exchange Online.

  2. Trovare l'URL del server remoto dell'endpoint di migrazione: ottenere l'URL del server remoto usando il cmdlet Get-MigrationEndpoint .

    Get-MigrationEndpoint | Format-List Identity, RemoteServer
    

    Viene visualizzato l'output seguente:

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

    Nota

    Il valore RemoteServer nell'output della sintassi del comando precedente viene generato eseguendo la procedura guidata di configurazione ibrida (HCW).

  3. Copiare il valore dell'URL di RemoteServer in base alle esigenze nella parte successiva.

  4. Creare una nuova richiesta di spostamento per spostare le cassette postali primarie e di archiviazione da Exchange Online tramite PowerShell

    • Inserire i seguenti dettagli come parte della creazione di una nuova richiesta di spostamento per spostare la cassetta postale principale e la cassetta postale di archiviazione da Exchange Online:

      • Identità: nome della cassetta postale o indirizzo di posta elettronica.
      • RemoteTargetDatabase: database delle cassette postali locali di Exchange.
      • RemoteHostName: il server remoto copiato nel passaggio 2.
      • TargetDeliveryDomain: dominio SMTP primario usato per le cassette postali dell'organizzazione di Exchange Online.
      • RemoteCredential: account amministratore locale con privilegi.

      Il comando da eseguire per creare una nuova richiesta di spostamento è:

      New-MoveRequest -OutBound -RemoteTargetDatabase "DB01" -RemoteHostName "mail.contoso.com" -TargetDeliveryDomain "contoso.com" -RemoteCredential (Get-Credential)
      
    • Immettere la password delle credenziali locali (RemoteCredential) per la richiesta di accesso alle credenziali che viene visualizzata, come illustrato nella sintassi del comando seguente, dopo l'esecuzione del comando:

      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
      

      Dopo aver eseguito il comando precedente che include la password delle credenziali locali, è possibile che vengano visualizzati i seguenti errori:

      • Impossibile trovare un destinatario con il GUID della cassetta postale
      • I GUID di archiviazione nei destinatari di origine e destinazione non corrispondono
  5. Spostare solo la cassetta postale principale da Exchange Online usando PowerShell

    • Se le posizioni delle cassette postali principali e delle cassette postali di archiviazione si trovano in Exchange Online e si desidera spostare solo la cassetta postale principale, aggiungere -PrimaryOnly e -ArchiveDomain parametri al comando eseguito per creare un nuovo spostamento e, nella sintassi del comando, inserire i seguenti dettagli:

      • Identità: nome della cassetta postale o indirizzo di posta elettronica.
      • OutBound: mantiene vuoto il valore.
      • RemoteTargetDatabase: database delle cassette postali locali di Exchange.
      • RemoteHostName: il server remoto copiato nel passaggio 2.
      • PrimaryOnly: mantiene vuoto il valore.
      • ArchiveDomain: dominio SMTP primario usato per le cassette postali dell'organizzazione di Exchange Online.
      • TargetDeliveryDomain: dominio SMTP primario usato per le cassette postali dell'organizzazione di Exchange Online.
      • RemoteCredential: account amministratore locale con privilegi.

      Il comando da eseguire per creare una nuova richiesta di spostamento è:

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

      Dopo aver eseguito il comando, viene visualizzata una richiesta di accesso per le credenziali, come illustrato nella seguente sintassi del 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
      

      Immettere la password delle credenziali locali (RemoteCredential).

  6. Ottenere lo stato di spostamento della cassetta postale

    • Ottenere lo stato della richiesta di spostamento della cassetta postale usando il 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
      

      Lo spostamento della cassetta postale viene completato. In caso contrario e non è possibile completare la richiesta di spostamento della cassetta postale, è possibile sospendere e riprendere la richiesta.

Per implementare il passaggio successivo della rimozione dei batch migrati completati, vedere Rimuovere i batch di migrazione completati.