> ## Documentation Index
> Fetch the complete documentation index at: https://ps365.clidsys.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get-ExMailboxQuotaInfo

> Reports the effective mailbox quota of each user against the storage their licenses entitle them to,
including the new 100 GB entitlement of the Microsoft 365 Business suites.

# Get-ExMailboxQuotaInfo

## SYNOPSIS

Reports the effective mailbox quota of each user against the storage their licenses entitle them to,
including the new 100 GB entitlement of the Microsoft 365 Business suites.

## SYNTAX

```powershell theme={null}
Get-ExMailboxQuotaInfo [[-Identity] <string[]>] [-IncludeUsage] [-OnlyIssues]
 [-ForceNewToken] [-ExportToExcel] [-ExportPath <string>]
```

## DESCRIPTION

Since the 2026 Microsoft 365 packaging updates (rolled out June-September 2026), Business Basic,
Business Standard and Business Premium include an additional 50 GB of primary mailbox storage,
bringing the entitlement from 50 GB to 100 GB.
The increase is delivered through a dedicated
service plan: the Business Exchange plan (BPOS\_S\_STANDARD) grants 50 GB, and the add-on plan
EXCHANGE\_STORAGE\_50GB adds the other 50 GB.
Both must be enabled for the mailbox to reach 100 GB.

This function crosses two sources, one row per mailbox:

* Exchange Online: the effective quotas (IssueWarningQuota, ProhibitSendQuota, ProhibitSendReceiveQuota)
* Microsoft Graph: the assigned SKUs and the enabled Exchange service plans of the user

It computes the expected maximum quota of EVERY mailbox from the licenses (100 GB for
Exchange Online Plan 2 or a Business suite with the storage add-on, 50 GB for Plan 1 alone or a
license-free shared/room/equipment mailbox, 2 GB for Kiosk) and flags the gaps in the Issue
column.
A mailbox that cannot be evaluated is flagged too, so an empty Issue always means
'evaluated and consistent':

* StorageAddOnNotProvisioned: Business suite license but the EXCHANGE\_STORAGE\_50GB plan is not
  enabled (disabled in the license options, or provisioning not completed yet)
* QuotaBelowEntitlement: the add-on is there but ProhibitSendReceiveQuota is still below the
  entitlement (custom quota set by an administrator, preserved by design, or provisioning pending)
* QuotaAboveEntitlement: ProhibitSendReceiveQuota exceeds what the current licenses entitle the
  user to (backfill applied on top of an already raised quota, or a 100 GB license since removed).
  Informational: the mailbox has more than its entitlement, not less
* EntitlementUnknown (\<plans>): the user holds an Exchange service plan whose quota is not in the
  internal map: the row is NOT evaluated (report it so the map can be extended)
* NoExchangeLicense: user mailbox without any Exchange service plan

Quotas are never additive across products: a user holding both a Business suite and an Enterprise
plan is entitled to 100 GB, not 150.
Custom quotas set by an administrator are preserved by the
rollout, which is exactly what this report surfaces.
The increase concerns the primary mailbox
only (no archive change).

## EXAMPLES

### EXAMPLE 1

```powershell theme={null}
Get-ExMailboxQuotaInfo
```

Quotas versus license entitlement for every user, shared, room and equipment mailbox of the tenant.

### EXAMPLE 2

```powershell theme={null}
Get-ExMailboxQuotaInfo -OnlyIssues
```

Only the mailboxes whose quota does not match what the licenses entitle them to
(Business suite without the +50 GB add-on, or quota still below the entitlement).

### EXAMPLE 3

```powershell theme={null}
Get-ExMailboxQuotaInfo -Identity 'user@contoso.com'
```

The report for a single user.

### EXAMPLE 4

```powershell theme={null}
Get-ExMailboxQuotaInfo -IncludeUsage
```

Same report with the current size of each mailbox and its usage percentage.

### EXAMPLE 5

```powershell theme={null}
Get-ExMailboxQuotaInfo -ExportToExcel
```

Exports the report to an Excel file in the user's profile directory.

## PARAMETERS

### -ExportPath

(Optional) Output directory for the Excel export.
Defaults to the user profile.

```yaml theme={null}
Type: System.String
DefaultValue: ''
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
```

### -ExportToExcel

(Optional) If specified, exports the results to an Excel file in the user's profile directory.

```yaml theme={null}
Type: System.Management.Automation.SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
```

### -ForceNewToken

Switch parameter to force getting a new token from Microsoft Graph.

```yaml theme={null}
Type: System.Management.Automation.SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
```

### -Identity

(Optional) One or more user principal names.
When omitted, every user, shared, room and
equipment mailbox of the tenant is evaluated.

```yaml theme={null}
Type: System.String[]
DefaultValue: ''
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: 0
  IsRequired: false
  ValueFromPipeline: true
  ValueFromPipelineByPropertyName: true
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
```

### -IncludeUsage

(Optional) Also retrieves the current mailbox usage (Get-EXOMailboxStatistics): columns
TotalItemSize, TotalItemSizeGB and UsagePercent (against ProhibitSendReceiveQuota).
One extra call per mailbox: noticeably slower on large tenants.

```yaml theme={null}
Type: System.Management.Automation.SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
```

### -OnlyIssues

(Optional) Returns only the mailboxes with a non-empty Issue column.

```yaml theme={null}
Type: System.Management.Automation.SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
```

### CommonParameters

This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable,
-InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable,
-ProgressAction, -Verbose, -WarningAction, and -WarningVariable. For more information, see
[about\_CommonParameters](https://go.microsoft.com/fwlink/?LinkID=113216).

## INPUTS

### System.String\[]

*Not documented.*

## OUTPUTS

### System.Collections.Generic.List\[PSCustomObject]

*Not documented.*

### System.Collections.Generic.List\`1\[\[System.Management.Automation.PSObject, System.Management.Automation, Version=7.5.0.500, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]

*Not documented.*

## NOTES

OUTPUT PROPERTIES

* UserPrincipalName        : the mailbox owner
* DisplayName              : display name of the mailbox
* RecipientTypeDetails     : UserMailbox, SharedMailbox...
* ProhibitSendQuota        : effective send quota reported by Exchange
* ProhibitSendReceiveQuota : effective maximum size reported by Exchange
* IssueWarningQuota        : warning threshold reported by Exchange
* UseDatabaseQuotaDefaults : whether the database defaults apply
* TotalItemSize            : current mailbox size (with -IncludeUsage, empty otherwise)
* TotalItemSizeGB          : current mailbox size in GB (with -IncludeUsage)
* UsagePercent             : TotalItemSizeGB / ProhibitSendReceiveQuota (with -IncludeUsage)
* LicenseLookupStatus      : Success or UserNotFoundInGraph
* Licenses                 : SKU part numbers assigned to the user, or None
* ExchangeServicePlans     : enabled Exchange service plans (BPOS\_S\_STANDARD, EXCHANGE\_STORAGE\_50GB...), or None
* HasBusinessSuite         : the user holds Business Basic, Business Standard or Business Premium
* HasStorageAddOn          : the EXCHANGE\_STORAGE\_50GB service plan is enabled
* ExpectedMaxQuotaGB       : maximum quota the licenses entitle the user to (empty when unknown)
* Issue                    : StorageAddOnNotProvisioned, QuotaBelowEntitlement, QuotaAboveEntitlement,
  EntitlementUnknown, NoExchangeLicense, or empty (evaluated and consistent)

Required Microsoft Graph permissions:

* User.Read.All
* Organization.Read.All

Requires an Exchange Online connection (Connect-ExchangeOnline is called when none exists).
Mailboxes are retrieved with Get-EXOMailbox (REST) for performance on large tenants.

Reference: [https://techcommunity.microsoft.com/blog/exchange/understanding-the-new-100-gb-mailbox-entitlement-for-microsoft-365-business-suit/4548243](https://techcommunity.microsoft.com/blog/exchange/understanding-the-new-100-gb-mailbox-entitlement-for-microsoft-365-business-suit/4548243)

Version history:
1.0 - Creation.
Crosses Exchange quotas with Graph service plans to check the 100 GB
Business suites entitlement (BPOS\_S\_STANDARD + EXCHANGE\_STORAGE\_50GB), flags the
missing add-on and the quotas below entitlement (custom quotas are preserved by
the rollout by design).

## RELATED LINKS

* [https://ps365.clidsys.com/docs/commands/Get-ExMailboxQuotaInfo](https://ps365.clidsys.com/docs/commands/Get-ExMailboxQuotaInfo.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.