I’ve recently had to perform a bit of licensing management for a client because they had a set of users who have Office 365 E1 licenses assigned but the Apps configured were inconsistent across the board. Using the Microsoft 365 admin center to perform this is possible but isn’t the most efficient method for large batches.
What I ended up using was PowerShell for the assignments and thought it would be useful to share the PowerShell cmdlets for some common licensing tasks that may be useful for others.
All of the cmdlets below require you to connect to the O365 tenant via Connect-MsolService cmdlet.
Obtaining licenses available in the tenant
The cmdlet to obtain the licenses available in the tenant is Get-MsolAccountSku and as the output below shows, the AccountSkuId name will not directly reflect what you see in the portal. Case in point, STANDARDPACK is actually the name for Office 365 E1:
Most of the names for these SKUs can be found at the following TechNet article:
Product names and service plan identifiers for licensing
https://docs.microsoft.com/en-us/azure/active-directory/enterprise-users/licensing-service-plan-reference
Obtaining the enabled or disabled apps for the license assigned to a user
Each Office 365 license actually bundles a group of applications that can be enabled or disabled for a user. Below is an example of what Apps are available when Office 365 E1 is assigned:
The following cmdlet allows us to obtain the Apps and their status for the specified user:
(Get-MsolUser -UserPrincipalName shaejames@contoso.com).Licenses.ServiceStatus
Note that this cmdlet will list all the Apps and their status. Success and Disabled is self-explanatory, while PendingProvisioning and PendingActivation is reflected in the follow 3 app entries with the same description:
This app is assigned at the organization level. It can’t be assigned per user.
Assigning a usage location and E1 license to a user
Set-MsolUser -UserPrincipalName “ATrott@contoso.com” -UsageLocation BM
Set-MsolUserLicense -UserPrincipalName “ATrott@contoso.com” -AddLicenses “reseller-account:STANDARDPACK”
**Note that the usage location cmdlet is Set-MsolUser
Retrieving a list of all users with E1 license
Get-MsolUser -All | Where-Object {($_.licenses).AccountSkuId -match “STANDARDPACK”}
Enabling or disabling apps for a user assigned with an E1 license
The following are examples of how to enable and disable various applications:
Only disable SWAY and enable all apps
$E1_DefaultApps = New-MsolLicenseOptions -AccountSkuId reseller-account:STANDARDPACK -DisabledPlans SWAY
Set-MsolUserLicense -UserPrincipalName “shaejames@contoso.com” -LicenseOptions $E1_DefaultApps
Disable SWAY and Exchange Online and enable all apps
$DisabledApps=@()
$DisabledApps+=”SWAY”
$DisabledApps+=”EXCHANGE_S_STANDARD”
$E1_DefaultApps = New-MsolLicenseOptions -AccountSkuId reseller-account:STANDARDPACK -DisabledPlans $DisabledApps
Set-MsolUserLicense -UserPrincipalName “shaejames@contoso.com” -LicenseOptions $E1_DefaultApps
Enable all apps
$DisabledApps=@()
$E1_DefaultApps = New-MsolLicenseOptions -AccountSkuId reseller-account:STANDARDPACK -DisabledPlans $DisabledApps
Set-MsolUserLicense -UserPrincipalName “shaejames@contoso.com” -LicenseOptions $E1_DefaultApps
Disable Skype for Business Online (Plan 2) and Exchange Online and enable all apps
$DisabledApps=@()
$DisabledApps+=”MCOSTANDARD”
$DisabledApps+=”EXCHANGE_S_STANDARD”
$E1_DefaultApps = New-MsolLicenseOptions -AccountSkuId reseller-account:STANDARDPACK -DisabledPlans $DisabledApps
Set-MsolUserLicense -UserPrincipalName “shaejames@contoso.com” -LicenseOptions $E1_DefaultApps
Set all users with E1 license to disable Skype for Business Online (Plan 2) and Exchange Online (Plan 1) options
$DisabledApps=@()
$DisabledApps+=”MCOSTANDARD”
$DisabledApps+=”EXCHANGE_S_STANDARD”
Get-MsolUser -All | Where-Object {($_.licenses).AccountSkuId -match “STANDARDPACK”} | Set-MsolUserLicense -LicenseOptions $E1_DefaultApps
Get all users with Microsoft Teams Commercial Cloud and E1 license
Get-MsolUser -All | Where-Object {($_.licenses).AccountSkuId -match “TEAMS_COMMERCIAL_TRIAL” -and ($_.licenses).AccountSkuId -match “STANDARDPACK”}
Get all users with Microsoft Teams Commercial Cloud and E1 license AND remove Microsoft Teams Commercial Cloud license
Get-MsolUser -All | Where-Object {($_.licenses).AccountSkuId -match “TEAMS_COMMERCIAL_TRIAL” -and ($_.licenses).AccountSkuId -match “STANDARDPACK”} | Set-MsolUserLicense -RemoveLicenses reseller-account:TEAMS_COMMERCIAL_TRIAL
Get all users with Microsoft Teams Exploratory and E1 license
Get-MsolUser -All | Where-Object {($_.licenses).AccountSkuId -match “TEAMS_Exploratory” -and ($_.licenses).AccountSkuId -match “STANDARDPACK”}
Get all users with Microsoft Teams Exploratory and E1 license AND remove Microsoft Teams Exploratory license
Get-MsolUser -All | Where-Object {($_.licenses).AccountSkuId -match “TEAMS_Exploratory” -and ($_.licenses).AccountSkuId -match “STANDARDPACK”} | Set-MsolUserLicense -RemoveLicenses reseller-account:TEAMS_Exploratory
————————————————————————————————————————
I hope these cmdlets will help anyone who may need to undertake a similar task.