Exchange Online error

TooManyBadItemsPermanentException

The mailbox move stopped because it found more corrupt or missing items than the move request allows.

Checked Official source linked
TooManyBadItemsPermanentException

Why it happens

The number of bad items in the source mailbox is higher than the move request's BadItemLimit. Missing items (items in the source that cannot be found in the target when the move is ready to complete) also count towards this limit, so the same fix applies to TooManyMissingItemsPermanentException.

Where you see it, and what it affects

The error appears as the failure on a mailbox move request or migration user in Exchange Online. You can read the detail in the move report, which Get-MoveRequestStatistics returns with the -IncludeReport switch, or in the move history from Get-MailboxStatistics -IncludeMoveReport. A bad item is a corrupt item in the source mailbox that cannot be copied. The default limit is 0, so a single bad item stops the request for that mailbox.

How to fix it

  1. 1

    Step 1

    Pull the move report and look at the bad items to see what will be left behind.

  2. 2

    Step 2

    Raise BadItemLimit on the move request to cover the number of bad items you found, then resume the move.

  3. 3

    Step 3

    For cloud migration batches, Microsoft has deprecated BadItemLimit. Review the Data Consistency Score and approve skipped items instead (see the DataConsistencyScore entry).

$stats = Get-MailboxStatistics user@contoso.com -IncludeMoveReport
$stats.MoveHistory[0].Report.BadItems
Get-MoveRequest user@contoso.com | Set-MoveRequest -BadItemLimit 10
Resume-MoveRequest user@contoso.com

Check that it is fixed

  • Run Get-MoveRequestStatistics -Identity user@contoso.com. A Status of Queued or InProgress means the request is proceeding normally.
  • Some failure messages from this cmdlet are temporary. Judge progress by the Status value, not by a single message.
  • In on-premises Exchange, if many bad items keep turning up, Microsoft suggests running New-MailboxRepairRequest on the source mailbox and trying the move again.

Sources

Full guide: How to migrate from Exchange Server to Exchange Online →