Review Microsoft 365 licences with context

A licence assignment tells you what someone has. Activity offers part of the picture of what they use. Bring those together with their role before deciding what should change.

Decide what you are reviewing

A useful review separates three questions: which products are assigned to people, how many seats are available across the tenant, and whether each person still needs the services their licences provide.

Choose a department or the whole organisation for the user review. Agree who will confirm the business need and record the reporting period so that later comparisons use a consistent basis.

For example, a person away from work may have little recent activity but still need their account and services. A spare seat may be reserved for a new starter. Both need context before a change is proposed.

Collect assignments and activity

Our Get-LicenceUsage.ps1 script is read-only. It produces user assignments alongside available activity information, plus a separate inventory of licence seats.

  1. Download and extract the ZIP from the resource library. Read its guide and review and test the beta script before use.
  2. Keep the script and M365.Common.psm1 together. Use the Microsoft Graph Authentication module and the directory, licence and report permissions described in the guide.
  3. Run the script from the extracted folder in a fresh PowerShell window.
  4. Choose the user scope and reporting period, review the choices and sign in through Microsoft with an authorised account.
.\Get-LicenceUsage.ps1

The script supports 7, 30, 90 or 180-day reporting periods, with 90 days as the default. It never removes licences or changes your organisation’s report privacy settings.

Keep the two exports separate

User assignments and activity
user-licence-usage.csv contains the selected users, their licence products and available activity dates. Someone with several products can appear on several rows; a row count is not a headcount.
Tenant licence inventory
tenant-licence-inventory.csv contains product seat counts across the whole tenant. A department filter affects the user export only, not this inventory.
The audit record
audit.json records the scope, operator, results and errors for the run. Keep it alongside the CSVs in the new Outcomes folder.

Use the product identifier and assignment state to understand what is allocated. An Unknown assignment state means the data was unavailable; it must not be treated as an unlicensed account.

Keep the exports in an approved location. They contain user and organisational information.

Treat missing activity as a question

The ActivityMatch column tells you whether activity was matched to the user. Unavailable, Ambiguous and NoMatchingRecordOrAnonymised are reasons to investigate the data, not evidence that a licence is unused.

Microsoft usage reports can lag behind current activity and hide identifiable user details by default. Check the report refresh date and your organisation’s reporting settings before interpreting blank activity fields. Microsoft explains both in its usage reports guidance.

Even a matched activity record is only part of a licence decision. The script’s activity fields cover Exchange, OneDrive, SharePoint and Teams; they do not establish the need for every feature in a product.

Ask the responsible manager to confirm the person’s role, any planned absence and the services they need. Record the reason for retaining or changing the assignment. If the person has left, resolve the offboarding and data handover decisions before changing licences.

The output should be a review list with an owner and a next step. Any approved licence changes happen separately through your normal administration process.

Need a wider Microsoft 365 review?

Explore an audit of your environment when a single report leaves questions about configuration, access or ongoing responsibility.