How to use Get-MailboxStatistics in Powershell

How to use Get-MailboxStatistics in Powershell

Managing an efficient email system is crucial for any organization using Microsoft Exchange. The Get-MailboxStatistics cmdlet is essential for administrators to get detailed information about mailbox sizes, activity, and health.

So, whether you’re solving problems with a single mailbox or auditing the whole Exchange database, let’s learn how to use Get-MailboxStatistics in PowerShell efficiently.

What is Get-MailboxStatistics Cmdlet in PowerShell?

The Get-MailboxStatistics cmdlet in PowerShell is a command used by administrators to gather detailed statistics about mailboxes in Microsoft Exchange Server environments.

This command provides information such as mailbox size, message count, last logon and logoff times, and storage limits. It can be run on one or many mailboxes and is key for managing mailbox databases, ensuring they comply with storage policies, monitoring user activity, and planning capacity.

The syntax of Get-MailboxStatistics varies depending on the database, identity, or server, but in general, these are the most important parameters to look into:


[-Identity] <GeneralMailboxOrMailUserIdParameter>


[-CopyOnServer <ServerIdParameter>]

[-DomainController <Fqdn>]








Here’s the meaning of each one of these parameters:

  • Identity <GeneralMailboxOrMailUserIdParameter>: Specifies the mailbox to retrieve statistics for.
  • Archive: Retrieves statistics for the archive mailbox of the specified user.
  • CopyOnServer <ServerIdParameter>: Specifies the server where a passive mailbox database copy resides.
  • DomainController (Fqdn): Specifies the domain controller that should be used to fetch data.
  • IncludeMoveHistory: Includes the history of move requests for the mailbox.
  • IncludeMoveReport: Provides a detailed report of the mailbox move.
  • IncludeQuarantineDetails: Includes details of the mailbox if it is in quarantine.
  • IncludeSoftDeletedRecipients: Retrieves statistics for mailboxes that are soft-deleted.
  • NoADLookup: Skips Active Directory lookup to speed up the command execution.
  • UseCustomRouting: Uses custom routing tables for server information determination.

What Can You Use the Get-MailboxStatistics Cmdlet Command For?

There are some interesting use cases for the Get-MailboxStatistics command, such as the following:

  • Mailbox Size Management: One primary use of the Get-MailboxStatistics cmdlet is to monitor and manage the size of user mailboxes. Administrators can generate reports on which mailboxes are nearing or exceeding their storage quotas. This is critical for preventing service disruptions and ensuring that mailbox sizes remain within organizational policies.
  • Activity Monitoring: Get-MailboxStatistics can be used to track user activity through details like last logon and logoff times. This information is useful for security monitoring and compliance, helping to detect irregular or unauthorized access to mailboxes.
  • Capacity Planning and Resource Allocation: By analyzing the data collected from Get-MailboxStatistics, IT administrators can make informed decisions about capacity planning and infrastructure scaling.

Get-MailboxStatistics vs. Get-MailboxFolderStatistics Cmdlets

Get-MailboxStatistics and Get-MailboxFolderStatistics are both PowerShell cmdlets used in Microsoft Exchange environments to gather different types of information about mailboxes.

Get-MailboxStatistics provides general statistics about a user's mailbox, such as the total size of the mailbox, number of items it contains, last logon and logoff times, and storage quotas. This cmdlet is geared towards providing an overview of the mailbox's usage and status at the mailbox level.

Get-MailboxFolderStatistics, on the other hand, dives deeper into the details of individual folders within a mailbox. It provides statistics for each folder, including the folder size, item count, and specific details about folder types (e.g., Inbox, Sent Items, etc.). This cmdlet is useful for administrators who need to understand how data is distributed across the folders in a mailbox and to identify folders that may be unusually large or contain an excessive number of items.

However, for users of Exchange Online, Microsoft recommends using the Get-EXOMailboxStatistics cmdlet instead of Get-MailboxStatistics.

The Get-EXOMailboxStatistics cmdlet is optimized for Exchange Online environments and provides more accurate and efficient performance when retrieving mailbox statistics in the cloud.

Requisites to Use Get-MailboxStatistics in PowerShell

Before using this cmdlet, it's crucial to comply with the following prerequisites:

  1. Permissions: To use the Get-MailboxStatistics cmdlet, you need to have the appropriate permissions assigned. These permissions involve roles related to Exchange administration, such as being part of the Exchange Organization Administrators group or having specific role-based access control (RBAC) permissions that allow the management of mailbox databases and mailboxes.
  2. Server Context: The cmdlet can be used without parameters on Mailbox servers only. When executed in this manner, it automatically retrieves statistics for all mailboxes across all databases located on the local server. This is practical for broad administrative reviews directly from the server.
  3. Required Parameters: If not running the cmdlet on a local Mailbox server to get data for all mailboxes, you must specify at least one of the following parameters to obtain any results: Server, Database, or Identity. These parameters help narrow down the cmdlet's operation to specific mailboxes, databases, or servers. The "Server" parameter specifies the Exchange server from which to gather mailbox statistics, "Database" narrows the statistics retrieval to mailboxes within a specific database, and "Identity" directly targets a specific mailbox for detailed statistics.

3 Steps to Use Get-MailboxStatistics in PowerShell

Now that we know what this cmdlet is for, let's learn how to use it in three simple steps.

Step 1: Connect to the Exchange Environment

First, you need to be connected to your Exchange server where the mailboxes are hosted, or if you are using Exchange Online, connect to Exchange Online PowerShell.

To connect to Exchange Online, simply use the Connect-ExchangeOnline cmdlet to establish a remote PowerShell session. You’ll need your admin credentials to log in.

Step 2: Execute the Cmdlet with Appropriate Parameters

Once connected and authenticated, you can execute the Get-MailboxStatistics cmdlet. Depending on what information you need, you may use it without parameters to get statistics for all mailboxes on the local server (if executed directly on a Mailbox server), or you can specify parameters to narrow down your query.

For example, check out the following example:

Get-MailboxStatistics -Identity JamesF

This example retrieves the mailbox statistics for the mailbox of the user James by using its associated alias, JamesF.

Step 3: Analyze and Utilize the Output

After running the Get-MailboxStatistics cmdlet, review the results for critical information like mailbox size and activity.

You can export data for detailed analysis or reporting with PowerShell’s Export-Csv cmdlet or use insights gained to take appropriate actions, such as advising on mailbox clean-up or adjusting quotas.

Mastering the Get-MailboxStatistics PowerShell Command

Learning how to use the Get-MailboxStatistics cmdlet is crucial for Exchange administrators to manage and monitor their email systems effectively. By using this tool, you can keep tabs on mailbox sizes, user activity, and storage, helping to prevent problems and ensure compliance with company policies.