Updated 3 months ago

Office 365 License Reporting and Management using PowerShell

by Kathy Cooper

8 min read

No Comments

Microsoft 365 administrators need to manage users and their licenses efficiently to reduce license costs. Also, it is necessary to understand users’ requirements before assigning the license and identify unused licenses to optimize license management.

2022 Update: MSOnline and AzureAD PowerShell modules are going to deprecate in 2022

This blog uses the MSOnline module to manage and generate reports on Office 365 licenses. Since the module is going to deprecate sooner, we have developed a new script to manage Office 365 licenses using MS Graph PowerShell. You can download the script from our blog: Manage Microsoft 365 licenses using MS Graph.

If you are a small organization, you can use Microsoft 365 admin center to assign and monitor licenses. But admin center is not feasible for large organizations. In this case, you can use PowerShell cmdlets to manage licenses. But, if you are new to PowerShell, it will be challenging to assign or remove licenses in bulk and generate license reports.

To overcome the difficulties, we have created an All-in-One PowerShell script for M365 license management. Yes! A single script can perform more than 10 Office 365 license management and reporting activities.

Script Highlights:
  • Generates 5 Office 365 license reports.
  • Allows to perform 6 license management actions that includes, adding or removing licenses in bulk.
  • License Name is shown with its friendly name like ‘Office 365 Enterprise E3’ rather than ‘ENTERPRISEPACK’.
  • The script can be executed with an MFA enabled account too.
  • Exports the report result to CSV.
  • Exports license assignment and removal log file.
  • The script is scheduler-friendly. i.e., you can pass the credentials as a parameter instead of saving them inside the script.

Office 365 License Reporting and Management using PowerShell Script:

As earlier said, you can use this script to generate various license reports and to perform license management actions. We have listed a few significant actions here.

Office 365 License management and reporting tool

Office 365 License Reporting
  1. Get all licensed users report
  2. Get all unlicensed users report
  3. Get users with a specific license type
  4. Find all disabled users with licenses
  5. Office 365 license usage report
Office 365 License Management
  1. Bulk: Assign a license to users (input CSV)
  2. Bulk: Assign multiple licenses to users (input CSV)
  3. Remove license from a user
  4. Bulk: Remove all licenses from users (input CSV)
  5. Remove specific license from all users
  6. Remove all licenses from disabled users

Office 365 License Reporting and Management Tool – Execution Methods:

To run this script, you can choose any one of the below methods.

Method 1: Execute the script with MFA and non-MFA account

Method 2: Execute the script by explicitly mentioning credential and the required ‘Action’.

You can use the above format to automate the report generation. If the admin account has MFA, you need to disable MFA based on the Conditional Access policy to make it work.

Method 3: To perform multiple actions without executing the script several times, you can use –MultipleActionsMode param.

It will show the main menu until you terminate the script by providing input as 0.

Unlock the Full Potential of this Script

The script supports the following in-built params to ease your Office 365 license management and reporting needs.

1.Action – To directly specify a reporting or management action instead of selecting it from main menu.

2.LicenseName – To get users with specific License Plan.

3.UserName and Password – To schedules the PowerShell script without interactive login.

4.MultipleActionsMode – To show main menu again after completing an action. It will help you to perform multiple actions continuously without executing the script again and again.

Export all Licensed Users in Office 365:

To get a list of licensed users in your organization, run the script as follows or select the required action from the main menu.

Using this report, you can find licensed users and their assigned licenses, license friendly names, account status, etc.

Sample Output:

Get all licensed users PowerShell

Note: You can refer our earlier blog to get detailed license report along with the assigned services and their status.

Get Unlicensed Users in Office 365 using PowerShell:

To view all the unlicensed users in your organization, run the below code directly or choose the required option from the menu.

By referring to this report, admins can identify users who don’t have any license plan and assign them a license, if required.

Sample Output:

Office 365 get unlicensed users report

Export List of Users with a Specific License Type:

To get Office 365 users with a specific license plan, run the script as follows.

It will ask for a license plan. After entering the license plan, the script will list the licensed users matching that license.

For example, to get a list of users with the E3 license, enter “Contoso:EnterprisePack” when the script prompts for the license name.

You can also pass the License Plan as a parameter as shown below.

Sample Output:

The sample output lists all the users with E3 license.

List users with E3 license in Office 365

Get Disabled Users Still Licensed in Office 365:

Generally, former employees’ accounts are disabled after they leave the office. In some situations, you may want to recover the Office 365 license from the departed users so that you can assign them to some other users. To find licensed disabled users, run the script as follows.

The exported report contains UPN, Display Name, License Plan, License Plan Friendly Name, Department, and Job Title.

Sample Output:

Find disabled users still licensed in Office 365

Office 365 License Usage Report:

Office 365 license usage report lists all the subscriptions available in your organization, along with the active license count and assigned license count. Bu referring to this report, you can calculate the unassigned license count.

To generate a license usage report, execute the script and select the needed action from the menu. Else, directly run the below code.

Sample Output:

Office 365 license usage report

Bulk Assign Office 365 License using PowerShell:

Users must have Office 365 license to use any Microsoft 365 services. Admins can assign the license(s) in bulk by using our PowerShell script. We have covered the most requested use cases below.

Assign a License to Users from CSV:

To assign Office 365 license to multiple users using a CSV file, run the PowerShell script as follows.

The script will ask for the License Name and CSV file path. We have given an example for the input details below.

Assign Office 365 license in bulk

Input File Format:

The input CSV/txt file must follow the format below: UPN of users separated by new line without a header.

Assign or remove license in bulk

Output Log File- Sample

After the script execution, you can refer to the ‘Office365_License_Assignment_Log’ file to know about the license assignment result.

Office 365 license assignment log file

You can also use Microsoft365DSC tool to assign licenses for bulk users.

Assign Multiple License to List of Users:

To assign multiple licenses to Microsoft 365 users, execute the script as shown below.

It will ask for the CSV file location and the licenses to be assigned. You can enter the license names in the following format- contoso:EnterprisePack,contoso:Flow_Free

For eg,

Assign multiple license in bulk

Set Usage Location in Office 365

Before a license can be assigned to the users, they must have ‘Usage Location’. Else, you will receive a ‘Licence cannot be assigned to a user without a usage location specified’ error. To set usage location for Office 365 users, we have given the ‘LicenseUsageLocation’ param.

While running the license assignment use cases, you can specify the ‘LicenseUsageLocation’ param to set usage location to users whose usage location value is empty.

For example,


Unassign Licenses from Office 365 Users using PowerShell:

Identifying and reclaiming unused licenses help to optimize the license usage and reduce the license cost. We have covered the most requested license removal techniques below.

Remove All Licenses from a User:

When a user no longer need licenses or leaves the organization, you can remove all the assigned licenses from that user. By using the below format, you can remove all the licenses from a user account.

After running the above format, the script will ask to enter the user’s identity to unassign the licenses. You can provide UserPrincipalName as an identity.

Remove All Office 365 Licenses for a List of Users in CSV:

When you want to regain the license(s) from former employees and inactive users, you can unassign the licenses in bulk by executing our script in the below format.

The script will prompt for input CSV. After entering the file path, the script removes the license from user accounts mentioned in the input CSV. After the execution, you can refer “Office365_License_Removal_Log” file to know about the license removal status.

Remove Specific License from All Users:

You can choose this use case in the following scenarios.

  • When you want to move from one license plan to another license plan. For e.g., E3 to E5.
  • When you no longer use a specific license plan

To remove a specific license from all users,

After running the above format, the script will ask for the license plan to be removed and then proceeds with license removal. In the end, you can refer to the license removal audit log file for the status.

Remove Licenses from Disabled Users:

Most organizations disable the departed users’ accounts instead of deleting them. To control cost and gain unused licenses, you can remove licenses from disabled users.

To remove all the licenses from all the disabled users, run the script as follows,

You can refer to the log file to know the list of disabled users and their unassigned licenses.

Schedule Office 365 License Reports:

Instead of manually running the script, you can use Windows Task Scheduler to execute the script automatically at a pre-configured time.

To run the script as scheduled PowerShell task, follow the below format

If the admin account has MFA, you need to disable MFA based on the Conditional Access policy to make it work.

How to Get Office 365 License Reports in a Simple Way?

If you are tired of running PowerShell cmdlets or scripts, you can try AdminDroid Office 365 Reporting tool. The tool provides 20+ license reports free of cost to manage your organization’s license needs efficiently.

Office 365 license dashboard

Additionally, AdminDroid provides over 100+ reports and a handful of dashboards completely for free. It includes reports on Users, Licenses, Groups, Group Members, Devices, Login Activities, Password Changes, License Changes, and more. The free version allows you to perform customization, scheduling, and exporting too. Download Free Office 365 reporting tool by AdminDroid and see how it helps you.

Each report provides AI-powered graphical analysis to gain insights and understand the data in a visually appealing manner.

Get all licensed users report

Besides, AdminDroid Microsoft 365 reporting tool provides 1500+ reports to get detailed reports on various Office 365 services like Azure AD, Exchange Online, SharePoint Online, Microsoft Teams, OneDrive for Business, Streams, One Note, Yammer, etc.

I hope this blog will help you in managing Office 365 licenses and generating license reports. You can share your license management techniques with other admins and us through the comment section.

Share article