Create a list of inactive Exchange mailboxes using PowerShell and Export to CSV

Scenario description

When users leave an organization their unused mailboxes can be overlooked and clutter your environment.

In this scenario we will help you discover these stale mailboxes within your organization. This script will demonstrate how to generate a report, save it to a CSV file, which provides a list of all the users who have not logged in for at least 30 days.  With this information you can then take the appropriate action to remove unused mailboxes.

There are a two things to note.

In some cases the report may not provide a LastLogin date, but there will always be a DaysInActive count.

Mailboxes under a litigation hold may also appear in this report, and they do not necessarily represent a mailbox that requires cleanup or removal.

Create a list of inactive Exchange mailboxes and save to CSV

To begin, you will need to load the Azure Active Directory module to be able to run the report.

Import-Module MSOnline

Capture administrative credential for future connections.

$credential = Get-Credential

Establishes Online Services connection to Azure Active Directory. 

Connect-MsolService -Credential $credential

Creates an Exchange Online session.

$ExchangeSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "" -Credential $credential -Authentication "Basic" -AllowRedirection

Import session commands.

Import-PSSession $ExchangeSession

This command will generate a list of users inactive for 30 days, or longer, and export to a CSV file.

Get-StaleMailboxDetailReport | Sort username -Unique | SELECT TenantName, UserName, WindowsLiveID, LastLogin, DaysInactive | Export-Csv c:\reports\StaleUsers30.csv
Exchange Online reporting commands

Use Windows PowerShell to create reports in Office 365.