Migracja folderu publicznego programu Exchange zatrzymuje się na poziomie 95% z błędem "Istnieją [xx] foldery publiczne, których nie można włączyć za pomocą poczty"

Symptomy

Podczas migracji folderów publicznych z Microsoft Exchange Server 2010 r. do Exchange Online proces zatrzymuje się na poziomie 95%.

Ponadto po uruchomieniu następującego polecenia przejrzyj raport migracji:

Get-PublicFolderMailboxMigrationRequest |Get-PublicFolderMailboxMigrationRequestStatistics -IncludeReport

Zostanie wyświetlony następujący błąd:

Name                                                              StatusDetail TargetMailbox PercentComplete
----                                                              ------------ ------------- ---------------
PublicFolderMailboxMigrationfb3cdd37-ecf4-4d33-xxxx -fcec86xxxxxx FailedOther  MigP1         95

Zrzut ekranu przedstawiający błąd w raporcie migracji.

Następnie uruchom następujące polecenie i otrzymasz szczegóły błędu:

$p=Get-PublicFolderMailboxMigrationRequest -Status Failed | Get-PublicFolderMailboxMigrationRequestStatistics -IncludeReport;$p[0].report.failures[-1].Message

Szczegóły błędu:

FailureType            : FailedToMailEnablePublicFoldersException
Message                : Error: There are 32 Public Folders that could not be mail-enabled. Please, check the migration report starting at date/time for additional details. This may indicate that mail public folder objects in Exchange Online are out of sync with your Exchange deployment. You may need to rerun the script Sync-MailPublicFolders.ps1 on your source Exchange server to update mail-enabled public folder objects in Exchange Online Active Directory.

Ze szczegółów błędu żądanie migracji pokazuje, że nie powiodło się podczas synchronizowania folderów publicznych z włączoną obsługą poczty e-mail ze środowiska lokalnego.

Jednak wszystkie foldery publiczne z włączoną obsługą poczty lokalnej są synchronizowane z Exchange Online. Ten błąd będzie powtarzany nawet w przypadku wielokrotnego uruchomienia skryptu ".\Sync-MailPublicFolders.ps1".

Ponadto po uruchomieniu lokalnego polecenia Get-MailPublicFolder nie są wyświetlane żadne foldery publiczne z włączoną obsługą poczty, a żądanie migracji nadal kończy się niepowodzeniem z powodu błędu.

Przyczyna

Jeśli folder publiczny jest włączony pocztą, właściwość MailEnabled zostanie ustawiona na wartość True. Polecenie Disable-MailPublicFolder zmienia tę właściwość na False i usuwa odpowiednie wpisy z kontenera MESO (Microsoft Exchange System Objects).

Jeśli polecenie Disable-MailPublicFolder nie zakończy oczyszczania poprawnie, może pozostawić właściwość MailEnabled jako true. Spowoduje to jednak usunięcie obiektów z kontenera MESO.

W takim scenariuszu polecenie Get-MailPublicFolder nie wyświetli listy folderów opisanych w komunikacie o błędzie jako folderów publicznych z włączoną obsługą poczty. Jednak te foldery są nadal uważane za włączone poczty. Powoduje to niepowodzenie migracji.

Obejście problemu

Istnieją dwa sposoby obejścia tego problemu:

Metoda 1. Wykrywanie problemów z folderami publicznymi z włączoną obsługą poczty lokalnej przy użyciu skryptu

  1. Pobierz i uruchom skrypt ValidateMailPublicFolders w Exchange Server lokalnie.

    Skrypt zgłasza oddzielone foldery publiczne z włączoną obsługą poczty i foldery publiczne z włączoną obsługą poczty znajdujące się w folderze NON_IPM_Subtree. Sugeruje również użycie polecenia w celu rozwiązania problemu.

  2. Uruchom polecenie sugerowane przez skrypt.

  3. Po rozwiązaniu problemów zgłoszonych przez skrypt uruchom skrypt ponownie i upewnij się, że nie zgłoszono żadnego problemu dla folderów publicznych z włączoną obsługą poczty.

Metoda 2. Wykrywanie problemów z folderami publicznymi z włączoną obsługą poczty lokalnej przy użyciu poleceń

  1. Wyświetl listę folderów publicznych, które nadal mają właściwość MailEnabled ustawioną na wartość True. Aby to zrobić, uruchom następujące polecenie:

    Uwaga

    Jeśli oprócz błędu, który mówi, że folder publiczny nie jest folderem publicznym z włączoną obsługą poczty, oprócz błędów zobaczysz błędy w poleceniu output.

    $pf=Get-PublicFolder \ -recurse -ResultSize Unlimited | ? { $_.MailEnabled }; ForEach ($i in $pf) {$mesoObj = Get-MailPublicFolder $i.identity; if ($mesoObj -eq $null) {$i }}
    
  2. Uruchom następujące polecenie, aby wyłączyć foldery publiczne z włączoną obsługą poczty:

    $pf=Get-PublicFolder \ -recurse -ResultSize Unlimited | ? { $_.MailEnabled }; ForEach ($i in $pf) {$mesoObj = Get-MailPublicFolder $i.identity; if ($mesoObj -eq $null) { Disable-MailPublicFolder $i -confirm:$False} }
    
  3. Wznów partię migracji zakończonej niepowodzeniem w Exchange Online.