Table of Contents
Monthly License Increases Coming Soon
Recently, I discussed how to find stale or inactive licensed user accounts. With Microsoft’s July 1 license increases coming up, the aim is to make sure that tenants don’t pay for licenses that are not in active use. Reviewing licenses regularly should be a top priority of tenant administrators and using PowerShell to automate that process just makes sense.
License Increases Cover More than Microsoft 365
Although the monthly price increases for Microsoft 365 licenses received most attention, Microsoft will increase prices for other common licenses too. If your tenant uses the Enterprise Mobility and Security Suite (EMS), you’ll pay an extra 13% for an E3 license and an extra 10% for an E5 license. Upticks are also coming for Entra P1 (16%) and P2 (11%) licenses, needed for important features like conditional access policies.
Given different countries, tax regimes, discounts negotiated with Microsoft, and varying increases across SKUs, knowing exactly how much extra a specific tenant’s licensing mix will be is difficult. But let’s take a stab at it using PowerShell to fetch licensing data from Entra ID and apply the information we know about new and old prices for the different SKUs. I use the U.S. prices and increases for this example.
The script uses the Microsoft Graph PowerShell SDK. The User.Read.All and LicenseAssignment.Read.All permissions are required to read user account information (including assigned licenses) and the tenant subscriptions (products used in the tenant).
Building an Array of License Increases
The first thing to do is to build an array of SKUs and monthly price increases. The data could be read in from a spreadsheet or CSV file, but my script creates the data as an array of PowerShell custom objects. An object contains the SKU identifier (GUID), its name, and price details:
[PSCustomObject]@{
SkuId = "cbdc14ab-d96c-4c30-b9f4-6ada7cdc1d46"
Name = "Microsoft 365 Business Standard"
IncreasePercent = 12
OldPrice = '12.50'
NewPrice = '14'
}
Finding Tenant Subscriptions with Monthly License Increases
Next, use the Get-MgSubscribedSku cmdlet to fetch details for the commercial subscriptions known in the tenant. This information can be matched against the array of license increases to produce the set of increases applicable to the tenant:
# Get tenant subscriptions and figure out which ones are affected by the price increases.
$TenantSkus = Get-MgSubscribedSku -All | Select-Object SkuId, SkuPartNumber,
@{Name="ConsumedUnits";Expression={$_.ConsumedUnits}},
@{Name="EnabledUnits";Expression={$_.PrepaidUnits.Enabled}}
# Join with price increases on SkuId
$IncreasedLicenses = ForEach ($Sku in $TenantSkus) {
$Match = $Microsoft365PriceIncreases | Where-Object { $_.SkuId -eq $Sku.SkuId }
If ($Match) {
[PSCustomObject]@{
Name = $Match.Name
SkuId = $Sku.SkuId
SkuPartNumber = $Sku.SkuPartNumber
ConsumedUnits = $Sku.ConsumedUnits
EnabledUnits = $Sku.EnabledUnits
IncreasePercent = $Match.IncreasePercent
OldPrice = $Match.OldPrice
NewPrice = $Match.NewPrice
}
}
}
In my tenant, I found three subscriptions affected by the monthly license increases:
Licenses with price increases: Name SkuPartNumber ConsumedUnits OldPrice NewPrice ---- ------------- ------------- -------- -------- Office 365 E3 ENTERPRISEPACK 25 23 26 Microsoft 365 E5 without Teams O365_w/o_Teams_Bundle_M5 10 48.45 51.45 Office 365 E5 without Teams Office_365_w/o_Teams_Bundle_E5 5 29.45 32.45
Generating Per-User Monthly License Increase Data
After the script determines what license increases apply to tenant subscriptions, calculating what the additional cost will be is a matter of finding the set of licensed user accounts and checking which accounts have the affected licenses. Two approaches can be taken:
- In small to medium tenants, a single Get-MgUser command can find all licensed accounts and a loop can check each account for the affected licenses.
- In larger tenants (over 10,000 accounts), it might be better to use separate Get-MgUser commands to fetch the accounts affected by each license and combine the results into a single set.
In either case, the result should be a list of accounts assigned licenses with increased prices. This information can be analyzed to generate the final results with the bottom line for the tenant (Figure 1).

The outcome isn’t guaranteed to be 100% for your tenant. Too many variables can affect the final price, but it will certainly give some guidance as to what kind of monthly price increase will come into effect on July 1, 2026.
You can grab the code for the script that I used from the Office 365 for IT Pros GitHub repository.
Using PowerShell to answer questions about Microsoft 365 tenant operations is exactly the reason why we wrote the Automating Microsoft 365 with PowerShell eBook, available standalone or as part of the Office 365 for IT Pros eBook bundle. Over hour hundred pages of knowledge (not AI-generated) showing how to solve real-world problems.