Exchange ServerHow-to

New-MailboxRepairRequest: fixing logical corruption in Exchange mailboxes

Detect and repair folder view, folder count, search folder and other logical mailbox corruption online with New-MailboxRepairRequest, then track it with Get-MailboxRepairRequest.

Wrong unread counts, folders that show the wrong items, broken search folders, a mailbox move that keeps failing on corrupted items: these point to logical corruption inside a mailbox rather than a damaged database. Exchange Server SE and Exchange 2019 fix it online with New-MailboxRepairRequest, the successor to the old ISINTEG tool. In this post I'll cover what it repairs, how to run it safely against a mailbox, an archive or a whole database, and how to confirm the result.

Errors this guide fixes

  • Event ID 10062 (MSExchangeIS Mailbox Store)Application log
  • Event ID 10048 (MSExchangeIS Mailbox Store)Application log
  • Event ID 10047 (MSExchangeIS Mailbox Store)Application log
  • Event ID 10059 (MSExchangeIS Mailbox Store)Application log
How this guide is organised: How it works → Choosing the corruption type → Step-by-step → Verify → Tips & gotchasFlow diagram of the article's sections in reading order: 1. How it works. 2. Choosing the corruption type. 3. Step-by-step (5 steps: Detect first; Watch the request; Repair; A whole database, or a mailbox by GUID; Check the event log). 4. Verify. 5. Tips & gotchas. Toolbox: New-MailboxRepairRequest, Get-MailboxRepairRequest, Get-MailboxDatabaseCopyStatus, AggregateCounts, FolderView.1How it works2Choosing thecorruption type3Step-by-step4Verify5Tips & gotchas1Detect first2Watch the request3Repair4A whole database,or a mailbox by G…5Check the eventlogTOOLBOXNew-MailboxRepairRequestGet-MailboxRepairRequestGet-MailboxDatabaseCopyStatusAggregateCountsFolderViewHow this guide is organised: How it works → Choosing the corruption type → Step-by-step → Verify → Tips & gotchasFlow diagram of the article's sections in reading order: 1. How it works. 2. Choosing the corruption type. 3. Step-by-step (5 steps: Detect first; Watch the request; Repair; A whole database, or a mailbox by GUID; Check the event log). 4. Verify. 5. Tips & gotchas. Toolbox: New-MailboxRepairRequest, Get-MailboxRepairRequest, Get-MailboxDatabaseCopyStatus, AggregateCounts, FolderView.1How it works2Choosing the corruption type3Step-by-step1Detect first2Watch the request3Repair4A whole database, or a mailbox by GUID5Check the event log4Verify5Tips & gotchasTOOLBOXNew-MailboxRepairRequestGet-MailboxRepairRequestGet-MailboxDatabaseCopyStatusAggregateCountsFolderView
At a glance: how this guide is organised · 5 steps · 5 key settings and tools

How it works#

A repair request runs inside the Information Store against the mounted database, so nothing has to be dismounted. A few rules from Microsoft's cmdlet reference shape how you use it:

  • Only the mailbox currently being processed is disrupted; the other mailboxes in the database keep working.
  • Once a request has started, you can't stop it except by dismounting the database.
  • Per server, only one database-level request can be active, or up to 100 mailbox-level requests.
  • It's an on-premises cmdlet; it isn't available in Exchange Online.

It repairs logical structures such as folder views, counts, search folders and the folder hierarchy, not physical page damage. If the event log shows ESE errors such as checksum failures, or a database copy reports corruption, fix the database (reseed from a healthy DAG copy or restore) rather than the mailbox.

You need a role that includes the cmdlet; Organization Management has it. To see which roles grant it in your organization, run Get-ManagementRole -Cmdlet New-MailboxRepairRequest.

Choosing the corruption type#

-CorruptionType is mandatory. These are the values you'll use most:

ValueWhat it targets
AggregateCountsFolder totals, such as item and unread counts, that don't match the contents
FolderViewFolder views that don't return the right contents
SearchFolderCorrupted search folders
ProvisionedFolderProvisioned folders pointing into parent folders that aren't provisioned
MissingSpecialFoldersMissing default folders (Exchange 2013 and later)
LockedMoveTargetA mailbox locked by a move; valid only while the mailbox is locked
AbandonedMoveDestinationAbandoned move destinations; database level only (Exchange 2016 and later)

The reference lists many more values, several reserved for Microsoft's internal use, and marks a number of them, including LockedMoveTarget and DropAllLazyIndexes, as values you can only use on their own. Microsoft's own examples combine the classic four (ProvisionedFolder, SearchFolder, AggregateCounts, FolderView) in one request; run anything else in a request of its own.

Step-by-step#

1. Detect first#

PowerShell
New-MailboxRepairRequest -Mailbox alex@contoso.com -CorruptionType ProvisionedFolder,SearchFolder,AggregateCounts,FolderView -DetectOnly

-DetectOnly reports problems without changing anything, which is the right first step for an important mailbox or when you need evidence before a change window.

2. Watch the request#

PowerShell
Get-MailboxRepairRequest -Mailbox alex@contoso.com | Format-List

Each corruption type becomes its own task. Look at the job state (Queued, Running, then Succeeded or Failed), the progress percentage and the number of corruptions detected and fixed. Requests wait for workload management to dispatch them, so a few minutes in Queued is normal. The -Force switch runs a request immediately instead of waiting, so keep it for urgent cases.

3. Repair#

PowerShell
New-MailboxRepairRequest -Mailbox alex@contoso.com -CorruptionType ProvisionedFolder,SearchFolder,AggregateCounts,FolderView

# The user's archive mailbox
New-MailboxRepairRequest -Mailbox alex@contoso.com -CorruptionType ProvisionedFolder,SearchFolder,AggregateCounts,FolderView -Archive

# Special cases: one value per request
New-MailboxRepairRequest -Mailbox alex@contoso.com -CorruptionType MissingSpecialFolders
New-MailboxRepairRequest -Mailbox alex@contoso.com -CorruptionType LockedMoveTarget

Warn the user first: access to the mailbox is disrupted while it's being processed, and the request can't be cancelled once it starts.

4. A whole database, or a mailbox by GUID#

PowerShell
New-MailboxRepairRequest -Database DB01 -CorruptionType AggregateCounts
Get-MailboxRepairRequest -Database DB01

$mbx = Get-MailboxStatistics alex@contoso.com
New-MailboxRepairRequest -Database $mbx.Database -StoreMailbox $mbx.MailboxGuid -CorruptionType FolderView

A database-level run works through every mailbox in turn, and only one can be active per server, so start it out of hours and expect it to take a while on large databases. The -StoreMailbox form is handy when all you have is a mailbox GUID, for example from an event or a move report.

5. Check the event log#

The Application log records repair activity under the MSExchangeIS Mailbox Store source. The IDs worth knowing:

Event IDMeaning
10047A mailbox-level repair request started
10059A database-level repair request started
10048The repair request completed successfully
10062Corruption was detected; the event lists each corruption and whether it was fixed
PowerShell
Get-WinEvent -FilterHashtable @{LogName='Application'; Id=10047,10048,10059,10062} -MaxEvents 20 |
  Format-List TimeCreated, Id, ProviderName, Message

Get-MailboxRepairRequest remains the authoritative status; the events are the audit trail and give you the detail of what was found.

Verify#

  • Run the same request again with -DetectOnly. Good looks like every task finishing Succeeded with zero corruptions detected.
  • Check the original symptom in Outlook on the web first, because it reads the server directly. If cached-mode Outlook still shows old counts or views, test with a fresh OST or profile before assuming the repair failed.
  • If the repair was for a failed move, retry the move and read its report again; see stalled and failed mailbox moves.

Tips & gotchas#

  • Detect, then repair. It costs a few minutes and gives you a record of what was wrong.
  • One database-level request per server. Plan database-wide runs one after another, not in parallel.
  • Corruption that keeps returning points elsewhere: storage, a misbehaving client or add-in, or physical damage. Check Get-MailboxDatabaseCopyStatus and the event log for ESE errors.
  • Repair before you migrate. Once a mailbox lives in Exchange Online this cmdlet isn't available to you, so fix known problems while the mailbox is still on-premises.
  • Don't reach for eseutil. Logical problems in one mailbox don't justify taking a whole database offline.

References#

Written and checked against current Microsoft Learn documentation. Test changes with a pilot group before rolling them out to everyone, and if an admin center path has moved since, search for the setting name instead.

Spotted a mistake, or did this fix work differently for you? Email me or message me on LinkedIn — corrections are credited in the article.

Written by

Omer Eltayeb

Intune Subject Matter Expert in Cairo, Egypt, former Microsoft Cloud Solutions Architect, Microsoft Certified Trainer and Microsoft Innovative Educator Expert (2024–26) and Microsoft Elevate Educator Expert (2026–27). I share practical, step-by-step guides, study plans, scripts and toolkits for Microsoft Intune, Configuration Manager, Microsoft Entra ID, Microsoft Defender, Exchange and Microsoft 365 with the community.

Microsoft Certified Trainer (MCT) 2026Microsoft Innovative Educator Expert 2025–2026Microsoft Elevate Educator Expert 2026–2027ISC2 Certified Information Systems Security Professional (CISSP)Microsoft 365 Certified: Enterprise Administrator Expert (MS-102)