During an Exchange online management activity for one of our enterprise clients, I had to determine which mailboxes are on cloud and which ones still resides on-premise. After going through several PS commands, I had to come up with a customized basic script to get this done neatly. This script will run against Office 365 and check for the following.
Get licensed users, fetch Display Name, UPN and IsLicensed properties and format the output then export the result to an CSV file.
Connect to Exchange online PowerShell using Connect-ExchangeOnline and then run the following after customizing the output path to suit your environment.
Get-MsolUser -MaxResults 50000 | Where-Object isLicensed -eq $true | Select-Object -Property DisplayName, UserPrincipalName, isLicensed, @{label='MailboxLocation';expression={ switch ($_.MSExchRecipientTypeDetails) { 1 {'Onprem'; break} 2147483648 {'Office365'; break} default {'Unknown'} } }} | Export-Csv c:\Official\Tools\mailusers.csv
You can run it directly from PowerShell which would result as below if everything went well.
Or use PowerShell ISE
Result would look something similar to this.
Get-MsolUser -MaxResults 50000 | Where-Object isLicensed -eq $true | Select-Object -Property DisplayName, UserPrincipalName, isLicensed, @{label='MailboxLocation';expression={ switch ($_.MSExchRecipientTypeDetails) { 1 {'Onprem'; break} 2147483648 {'Office365'; break} default {'Unknown'} } }} | Export-Csv c:\Official\Tools\mailusers.csv