Had a look around internet and couldn’t find anywhere a script to add/remove Office 365 licenses in bulk using PowerShell. There were a lot of examples about how to set these fresh (without consideration for what is already set), so quickly conjured this up…. Someone may find it helpful.
A quick note on the scenario – The company I am working at had already disabled some licenses for some users. I was asked to disable PowerApp and Flow. Now I couldn’t simply set the license options as follows.
$accountID = (Get-solAccountSku).AccountSkuId
# Disabled Plans
$disabledPlans= @()
$disabledPlans +="FLOW_O365_P2"
$licenseOptions = New-MsolLicenseOptions -AccountSkuId $accountID -DisabledPlans $disabledPlans;
$licensedUsers = Get-MsolUser -All | ? {$_.isLicensed -eq "TRUE"}
$licensedUsers | Set-MsolUserLicense -LicenseOptions $licenseOptions
This would enable anything else that was previously disabled.
In summary, I needed to loop through existing disabled licences and add to $disabledPlans before I could set the licenses. Here is the code to disable PowerApps and Flow (apologies about the formatting).
# $cred = Get-Credential
# Connect-MsolService -Credential $cred
$licensedUsers = Get-MsolUser -All | ? {$_.isLicensed -eq "TRUE"}
ForEach ($licensedUser in $licensedUsers)
{
Write-Host "---------------------------------"
Write-Host "UserPrincipalName-"$licensedUser.UserPrincipalName
$accountSku = $licensedUser.Licenses.AccountSkuId
Write-Host $accountSku
# Disabled Plans
$disabledPlans= @()
$disabledPlans +="FLOW_O365_P2"
$disabledPlans +="POWERAPPS_O365_P2"
$licensesAssigned = $licensedUser.Licenses.ServiceStatus
foreach ($serviceStatus in $licensesAssigned)
{
# A bit of logic to check if its not already disabled as we don't want to add twice
if($serviceStatus.ProvisioningStatus -eq "Disabled")
{
$planName = $serviceStatus.ServicePlan.ServiceName
Write-Host "Already Disabled - "$planName
if($planName -eq "FLOW_O365_P2" -or $planName -eq "POWERAPPS_O365_P2")
{
# Do nothing as already added above
}
else
{
# Add to array as we want to keep it disabled
$disabledPlans += $planName
}
}
}
# Now ready to create license Options and disable plabs for that user
Write-Host "Disabling following licenses for user"
Write-Host $disabledPlans
$licenseOptions = New-MsolLicenseOptions -AccountSkuId $accountSku -DisabledPlans $disabledPlans;
Set-MsolUserLicense -UserPrincipalName $licensedUser.UserPrincipalName -LicenseOptions $licenseOptions
}
