How to tell which Office 365 services have been provisioned.

One of the questions I encounter regularly, is;

"After assigning a license to a user in Office 365, how long will it take for the different services to be provisioned?"

Now, although I cannot give you exact numbers, there is an easy way to see which Online Services have been provisioned in Office 365 after you assign a license to a user.

In this example, I will assign an E3 license to an Office 365 user and monitor the progress of the provisioning of the different Online Services.

First, we need to connect to Office 365 using PowerShell. If you haven't installed the PowerShell tools for Office 365 yet, now would be the time to do so. The tools can be downloaded here;

After this PowerShell module has been installed, please connect to Office 365 by running these PowerShell commands:

Import-Module MSOnline
$cred = Get-Credential
Connect-MsolService -Credential $cred

Now that we are connected to Office 365, let's find a single, unlicensed, user;

PS C:\> Get-MsolUser -UnlicensedUsersOnly -MaxResults 1

UserPrincipalName DisplayName isLicensed
----------------- ----------- ----------                  
TBremer@contoso.com Ted Bremer False

Okay, so I have a user here with UPN 'tbremer@contoso.com' that does currently not have an Office 365 license.

First, let me check wich licenses we have available;

PS C:\> Get-MsolAccountSku

AccountSkuId ActiveUnits WarningUnits ConsumedUnits
------------ ----------- ------------ -------------
contoso:RIGHTSMANAGEMENT 1 0 1  
contoso:INTUNE_A 25 0 0 
contoso:ENTERPRISEPACK 25 0 5

In this case, we want to assign an E3 license (contoso:ENTERPRISEPACK) to this one user. We issue these commands:

PS C:\> Set-MsolUser -UserPrincipalName tbremer@contoso.com -UsageLocation NL

PS C:\> Set-MsolUserLicense -UserPrincipalName tbremer@contoso.com -AddLicenses contoso:ENTERPRISEPACK

Now that the user has a license, Office 365 will start provisioning the Online services. In this case; Yammer, RMS, Exchange Online, Lync Online, SharePoint Online and Office 365 Pro Plus.

We can now check the status of this provisioning by looking at the Service Status of the assigned License. This is the command you can issue to see this:

PS C:\> (Get-MsolUser -UserPrincipalName tbremer@contoso.com).Licenses[0].ServiceStatus

ServicePlan ProvisioningStatus
----------- ------------------
YAMMER_ENTERPRISE PendingInput
RMS_S_ENTERPRISE PendingInput
OFFICESUBSCRIPTION PendingInput
MCOSTANDARD PendingInput
SHAREPOINTWAC PendingInput
SHAREPOINTENTERPRISE PendingInput
EXCHANGE_S_ENTERPRISE PendingInput 

The "PendingInput" status means that nothing has been provisioned (yet) for this customer. We can repeat the same command and see if Office 365 has made any progress yet;

After a few seconds, we could see output that resembles this:

PS C:\> (Get-MsolUser -UserPrincipalName tbremer@contoso.com).Licenses[0].ServiceStatus

ServicePlan ProvisioningStatus                         
----------- ------------------
YAMMER_ENTERPRISE PendingInput
RMS_S_ENTERPRISE PendingInput
OFFICESUBSCRIPTION PendingInput
MCOSTANDARD PendingInput
SHAREPOINTWAC PendingInput
SHAREPOINTENTERPRISE PendingInput
EXCHANGE_S_ENTERPRISE Success

So now we see that the Provisioning Status for EXCHANGE_S_ENTERPRISE (Exchange Online) has changed to "Success". This indicates that Exchange Online has successfully provisioned this user.

After we give it a few more minutes (or hours) we could see this output;

PS C:\> (Get-MsolUser -UserPrincipalName tbremer@contoso.com).Licenses[0].ServiceStatus

ServicePlan ProvisioningStatus
----------- ------------------
YAMMER_ENTERPRISE PendingInput
RMS_S_ENTERPRISE PendingInput
OFFICESUBSCRIPTION Success
MCOSTANDARD Success
SHAREPOINTWAC Success
SHAREPOINTENTERPRISE Success
EXCHANGE_S_ENTERPRISE Success

Now, all Online Services have been successfully provisioned! We now know this user can use all the Online Services.

You can easily incorporate the ServiceStatus in your provisioning scripts. For example, if you want to modify specific settings on a users mailbox in an automated fashion, you can simply utilize this ServiceStatus to see of the specific service is available. Of course, take into account that some services might have been disabled/unlicensed for a user:

PS C:\> (Get-MsolUser -UserPrincipalName tbremer@contoso.com).Licenses[0].ServiceStatus

ServicePlan ProvisioningStatus
----------- ------------------
YAMMER_ENTERPRISE PendingInput
RMS_S_ENTERPRISE Disabled
OFFICESUBSCRIPTION Disabled
MCOSTANDARD Disabled
SHAREPOINTWAC PendingInput
SHAREPOINTENTERPRISE PendingInput
EXCHANGE_S_ENTERPRISE Success 

Hope this helps!