Microsoft 365 Business Mailboxes Still Stuck at 50 GB? Here’s How to Push Them to 100 GB
It’s no secret: Microsoft is doubling mailbox storage for Microsoft 365 Business plans, from 50 GB to 100 GB. Yet for many of you, nothing has changed: mailboxes are still capped at 50 GB, largely because Microsoft is rolling this out in waves.
Table of Contents
Storage is doubling, but not on July 1, 2026
On December 4, 2025, Microsoft announced that Microsoft 365 Business plans would be changing: Basic, Standard, and Premium. Among the improvements, the primary mailbox increases from 50 GB to 100 GB. For businesses, this means that adding an Exchange Online Plan 2 subscription, which was previously used only to gain more storage for certain large mailboxes, is becoming less relevant, since the Business offering now reaches the same 100 GB threshold. But be careful: that is not the only benefit of the Exchange Online Plan 2 license.
So where are the extra 50 GB? According to the Microsoft 365 Message Center (MC1304290 reference), the additional 50 GB is delivered as a dedicated service that Microsoft is gradually adding to each Business license (its little name: EXCHANGE_STORAGE_50GB).
As for timing, the rollout began in mid-June 2026, with completion initially targeted for early August. On June 22, 2026, Microsoft revised that plan: for Microsoft 365 Business licenses, it will be completed by September 30, 2026. In other words, July 1 is the effective date for the new pricing (and Microsoft certainly didn’t forget that), while the storage change is spread over several months.
In theory, the storage increase should eventually apply automatically, with no action required from IT teams. In practice, waiting can be long for mailboxes already close to full.
Mailboxes that remain stuck at 50 GB
After July 1, 2026, many administrators notice that some mailbox quotas have not changed. There are two ways to explain this:
- Asynchronous rollout: until the service has been added and activated for a given mailbox, the quota remains at 50 GB. Since this provisioning is done tenant by tenant, and mailbox by mailbox, two users in the same organization can show different quotas at a given point in time.
- A quota set by a previous event: Microsoft documents, in a dedicated support article (KB4025170), a case where quotas are not automatically increased after a license change. When a mailbox has already had a quota set explicitly, or when a lower-quota license was assigned before a higher-quota license, the old value remains in place and does not update on its own.
Let’s see how to get out of this situation.
Increase the Exchange Online quota with PowerShell
For mailboxes that do not get the 100 GB increase on their own, you can use PowerShell to modify the quota on specific mailboxes without waiting. More importantly, this avoids the blunt method of removing and reassigning the license on a user account. Microsoft also describes this approach in its documentation.
It consists of rewriting the mailbox thresholds directly:
Set-Mailbox -Identity <utilisateur> -ProhibitSendReceiveQuota 100GB -ProhibitSendQuota 99GB -IssueWarningQuota 98GBIf the thresholds still do not update, Microsoft recommends checking that the UseDatabaseQuotaDefaults setting for the mailbox is set to false:
Set-Mailbox -Identity <utilisateur> -UseDatabaseQuotaDefaults:$falseTo act on multiple mailboxes, these commands can easily be integrated into a script. The cmdlets are part of the ExchangeOnlineManagement module, whose installation and connection steps are covered in our tutorial on installing the Exchange Online V3 module.
This method has one limitation. If the EXCHANGE_STORAGE_50GB service has not yet been provisioned for the mailbox (status PendingProvisioning visible through Microsoft Graph), Set-Mailbox will not raise the quota to 100 GB until the plan is active. For these mailboxes, you need to wait for Microsoft’s rollout to finish, or try to trigger license provisioning again.
That is exactly what a script I came across on LinkedIn, published by Arnaud Adam, aims to do. Rather than rewriting the quota, it checks the storage service state, then forces a reevaluation of license assignments on the pending mailboxes using the Invoke-MgLicenseUser command. The approach seems viable to me, so I’m sharing the cleaned-up script here for anyone who wants to try it.
# =====================================================================
# Quota Microsoft 365 Business : forcer le passage de 50 Go a 100 Go
# Repere les boites encore a 50 Go, verifie le provisionnement du
# service de stockage, puis relance l'attribution de licence.
# =====================================================================
# --- Connexions aux deux services ------------------------------------
# Exchange Online : lecture des quotas de boites
Connect-ExchangeOnline
# Microsoft Graph : lecture des licences et reprocessing (droit en ecriture requis)
Connect-MgGraph -Scopes "User.ReadWrite.All"
# --- 1. Etat des lieux -----------------------------------------------
# Repartition de toutes les boites utilisateur par quota d'envoi/reception.
# Permet de voir d'un coup d'oeil combien sont encore bloquees a 50 Go.
Get-EXOMailbox -ResultSize Unlimited -RecipientTypeDetails UserMailbox -Properties ProhibitSendReceiveQuota |
Group-Object ProhibitSendReceiveQuota |
Format-Table Name, Count
# --- 2. Diagnostic des boites encore a 50 Go -------------------------
# Pour chaque boite plafonnee a 50 Go, on interroge le detail des licences
# et on isole le service de stockage additionnel (EXCHANGE_STORAGE_50GB)
# afin de connaitre son etat de provisionnement.
$report = Get-EXOMailbox -ResultSize Unlimited -RecipientTypeDetails UserMailbox -Properties ProhibitSendReceiveQuota |
Where-Object { $_.ProhibitSendReceiveQuota -like "50 GB*" } |
ForEach-Object {
# Recherche du plan de service de stockage sur le compte
$servicePlan = Get-MgUserLicenseDetail -UserId $_.UserPrincipalName |
Select-Object -ExpandProperty ServicePlans |
Where-Object ServicePlanName -eq "EXCHANGE_STORAGE_50GB"
# Statut : valeur de provisionnement si le plan existe, sinon "ABSENT"
[pscustomobject]@{
UPN = $_.UserPrincipalName
Status = if ($servicePlan) { $servicePlan.ProvisioningStatus } else { "ABSENT" }
}
}
# Affichage du rapport de diagnostic
$report | Format-Table
# --- 3. Forcage : reprocessing des licences ---------------------------
# On ne relance que les comptes dont le plan est en attente (PendingProvisioning).
# Invoke-MgLicenseUser declenche l'action reprocessLicenseAssignment cote Entra.
$report |
Where-Object Status -eq "PendingProvisioning" |
ForEach-Object { Invoke-MgLicenseUser -UserId $_.UPN }
# --- 4. Controle (a relancer apres 15 a 30 minutes) ------------------
# Nouvelle repartition des quotas pour verifier la remontee vers 100 Go.
Get-EXOMailbox -ResultSize Unlimited -RecipientTypeDetails UserMailbox -Properties ProhibitSendReceiveQuota |
Group-Object ProhibitSendReceiveQuota |
Format-Table Name, CountFeel free to share your feedback in the comments, and thanks to Arnaud for the tip.

