When assigning an Office 365 license to a user, by default several service plans are enabled. When assigning an Office 365 E3 license to a user, the following service plans are enabled by default:
- Azure Rights Management
- Office 365 Pro Plus
- Skype for Business Online (Plan 2)
- Office Online
- SharePoint Online (Plan 2)
- Exchange Online (Plan 2)
From an end user perspective the user will see the following options when logging on to Office 365.
When looking at the users settings within the Office 365 Admin portal , things look as following:
The below PowerShell function allows an Office 365 user administrator to disable individual services for a registered Office 365 user.
The following command disables the Skype for Business Service
Disable-MsolUserServicePlan alextest@contoso.onmicrosoft.com -ServicePlan SkypeforBusiness
Now doing the same for Exchange and the Office web apps.
Disable-MsolUserServicePlan alextest@contoso.onmicrosoft.com -ServicePlan OfficeWebApps -Verbose
Disable-MsolUserServicePlan alextest@contoso.onmicrosoft.com -ServicePlan Exchange -Verbose
Note, before running the below command, you must connect to Azure Directory using the connect-msolservice cmdlet.
The script can be downloaded from here
More information:
Working with Office 365 User Licenses
Use Office 365 PowerShell to disable access to services
function Disable-MsolUserServicePlan { <# .Synopsis Disables an Office 365 Service Plan for a user .DESCRIPTION The Disable-MsolUserServicePlan cmdlet disables an Office 365 Service Plan for the specified user. When assigning an Office 365 E3 license to a user, by default the following Service plans are enabled RMS_S_ENTERPRISE, OFFICESUBSCRIPTION,MCOSTANDARD,SHAREPOINTWAC,SHAREPOINTENTERPRISE,EXCHANGE_S_ENTERPRISE Azure Rights Management, Office Pro Plus, Skype for Business, Office Web Apps, Sharepoint, Exchange Use the Disable-MsolUserServicePlan to disable an individual Service Plan. This cmdlet requires the Azure Directory PowerShell module https://technet.microsoft.com/library/jj151815.aspx#bkmk_installmodule Connect to Azure Directory first before using this cmdlet Connect-MsolService .PARAMETER UserPrincipalName The user ID of the user to retrieve. .PARMAETER ServicePlan The Service Plan to disable .EXAMPLE Disable-MsolUserServicePlan -UserPrincipalName john.doe@contoso.onmicrosoft.com -ServicePlan SkypeforBusiness This command disables Skype for Business for user John Doe .EXAMPLE Disable-MsolUserServicePlan -UserPrincipalName john.doe@contoso.onmicrosoft.com -ServicePlan Exchange This command disables Exchange for user John Doe .NOTES Created by Alex Verboon, 13. Dec. 2015 https://msdn.microsoft.com/en-us/library/dn568014.aspx https://technet.microsoft.com/en-us/library/dn771769.aspx #> [CmdletBinding(SupportsShouldProcess=$true)] Param ( [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true,HelpMessage="The users office 365 principalname", Position=0)] [string]$UserPrincipalName, [Parameter(Mandatory=$true, ParameterSetName = "ServicePlan", ValueFromPipelineByPropertyName=$true, Position=1)] [ValidateSet("SkypeforBusiness","OfficeWebApps","SharePoint","Exchange","OfficeProfessionalPlus","AzureRightsManagement")] [string]$ServicePlan ) Begin { $AccountSkuID = (Get-MsolAccountSku | Where {$_.SkuPartNumber -eq "ENTERPRISEPACK"}).AccountSkuId switch($ServicePlan) { "SkypeforBusiness" {$planname = "MCOSTANDARD"} "OfficeWebApps" { $planname = "SHAREPOINTWAC"} "SharePoint" {$planname = "SHAREPOINTENTERPRISE"} "Exchange" {$planname = "EXCHANGE_S_ENTERPRISE"} "OfficeProfessionalPlus" {$planname = "OFFICESUBSCRIPTION"} "AzureRightsManagement" {$planname = "RMS_S_ENTERPRISE"} } Write-Verbose "Selected plan to disable: $planname" $ouser = Get-MsolUser -UserPrincipalName $UserPrincipalName -ErrorAction SilentlyContinue if ($ouser -ne $null) { $ouserlicense = $ouser.Licenses | Select-Object -ExpandProperty ServiceStatus $DisabledServices = ($ouserlicense | Where-Object -Property ProvisioningStatus -EQ "Disabled").ServicePlan.ServiceName Write-verbose "Current Disabled Service Plans: $DisabledServices" $EnabledServices = ($ouserlicense | Where-Object -Property ProvisioningStatus -EQ "Success").ServicePlan.ServiceName Write-verbose "Current Enabled Service Plans: $EnabledServices" } Else { Write-Error "User $UserPrincipalName does not exist" break } } Process { If ($DisabledServices -contains $planname -eq $true) { Write-output "The Service plan DisableServicePlan is already disabled for user $UserPrincipalName" } Else { If ($DisabledServices.Count -eq 0) { $DisabledServicesNew = $planname } Else { $DisabledServicesNew = {$DisabledServices}.Invoke() $DisabledServicesNew.Add("$planname") } $LicenseOptions = New-MsolLicenseOptions -AccountSkuId "$AccountSkuID" -DisabledPlans $DisabledServicesNew Write-Verbose "New Disabled Service Plans: $($LicenseOptions.DisabledServicePlans)" If ($PScmdlet.ShouldProcess("Disabling Service Plan $planname for user$UserPrincipalName")) { Set-MsolUserLicense -UserPrincipalName "$UserPrincipalName" -LicenseOptions $LicenseOptions } } } End{} }
Thanks for the script.
can you please share for multiple users
Hi,
I suggest you create another script that does a forEach for every user you want to modify, and then launch the cmdlet per user.