Use Exchange Online PowerShell scripts to blaze through routine tasks
Administrators tasked with handling many Exchange Online mailboxes can perform tasks, such as setting mailbox size limits and searching for messages, in bulk with PowerShell.
Managing an on-premises Exchange Server can be a complex task, particularly when the number of mailboxes rises quickly. Automation with PowerShell can help get a lot of work done without spending much time managing objects one at a time. Administrators whose organizations plan to host their email in Office 365 won't leave all their automation skills behind when they move to the cloud. These Exchange Online PowerShell scripts will run bulk operations to create and administer multiple mailboxes at once.
Make the connection
Since Exchange Online is an online service, the first step to managing users is to make that initial connection. Download and install the Microsoft Online Sign-in Assistant, and then download and install the Azure Active Directory PowerShell Module. Use the script below to connect a remote PowerShell session to the Exchange Online service and then import the required cmdlets.
$credential = Get-Credential
$session = New-PSSession -ConfigurationName Microsoft.Exchange `
-ConnectionUri https://outlook.office365.com/powershell-liveid/ `
-Credential $credential `
-Authentication Basic `
-AllowRedirection
Import-PSSession $session -DisableNameChecking -AllowClobber
Connect-MsolService -Credential $credential
The Exchange team used some unapproved verbs in the module. We use the -DisableNameChecking parameter to suppress the warning that will get displayed otherwise.
Managing Office 365 mailboxes
One of the most basic tasks is to find the Office 365 mailboxes and get their information. Run the Exchange Online PowerShell script in Figure 1 to find a mailbox and get its usage statistics.

The script doesn't return much information in Figure 1, but it's just an abbreviated listing. Adding | Get-Member to the end of the script returns the full list of properties from the Get-MailboxStatistics cmdlet. With those properties, administrators can generate the information shown in Figure 2.

Use an Exchange Online PowerShell script to create new Office 365 mailboxes as well. Assume there is a comma-separated values text file with a list of users, as shown in Figure 3.

With the text file in place, the script in Figure 4 can create the users and their mailboxes.

The $newBoxes variable contains the new mailboxes created by the script. Administrators can call that variable to return the new boxes as shown in Figure 5.

As the script creates the users and their corresponding mailboxes, it will likely return an error asking the administrator to issue a license to the users. Fix that with this script:
Get-MSOLUser | Where-object userPrincipalName -in $newBoxes.userPrincipalName | Set-MsolUserLicense -AddLicenses <tenant>:ENTERPRISEPACK
Use the script below to verify owner rights to check what's getting sent and received.
$newBoxes | Foreach-Object {Add-MailboxFolderPermission -Identity $_.UserPrincipalName -User <[email protected]> -AccessRights Owner}
Since these are test mailboxes, consider lowering the size limit to 5 gigabytes, as shown in Figure 6.

Exchange Online PowerShell scripts for searching
An Office 365 administrator needs to perform a mailbox search occasionally. The Exchange Online PowerShell script below can search through all the mailboxes and gather the results into one place for review.
Get-Mailbox | Search-Mailbox -SearchQuery 'Subject:"Microsoft Office"' -TargetMailbox "Discovery Search Mailbox" -TargetFolder "MSOffice Mail" -LogLevel Full
Connect to the mailbox Discovery Search Mailbox in Outlook to see the results in a discovery mailbox. The Discovery Search Mailbox should have a new folder called MSOffice Mail that contains the search results. If the query finds a match, it puts a copy of the message to that mailbox folder; the messages can be viewed in Outlook like any other mailbox.
While this query is simple, administrators can build complex ones using this Keyword Query Language syntax reference guide.
Deactivating Office 365 mailboxes
Disabling a mailbox is easy, but this procedure requires caution. An inexperienced Exchange administrator may not know that disabling a mailbox detaches it from its Active Directory object. When you are prepared to proceed, use this script:
Get-Mailbox -filter 'Name -like "test*"' | Disable-Mailbox -Archive