Export Office 365 users and their Licenses configurations

Office 365 provides several ways to see user assigned license plans. You can use the admin portal, Azure Powershell or PowerShell for Office 365.

The biggest question is how to see both assigned license plans, enabled license and disabled license features for many users ? Not easy to reach your goal when using the admin portal. The best way is to use PowerShell.

Here, I provide you an Office 365 Powershell script for exporting all your licensed users, with their assigned license plans, their enabled and disabled licenses options.

Function Export-UsersLicensesConfig {

    #License Plans correspondence table with friendly name
    
    $LicensePlan = @{         
              ##<companyname>:<Licenseplan> = <license plan friendly name>          
                      "koaf365:AAD_PREMIUM" = "AzureAD Premium Plan 1"             
                   "koaf365:AX7_USER_TRIAL" = "Dynamics AX7.0 TRIAL"         
                     "koaf365:DESKLESSPACK" = "OFFICE 365 F1"       
          "koaf365:DYN365_ENTERPRISE_P1_IW" = "Dynamics 365 Enterprise Plan1"   
              "koaf365:DYN365_RETAIL_TRIAL" = "Dynamics 365 CRM TRIAL"               
                              "koaf365:EMS" = "EMS_E3"             
                       "koaf365:EMSPREMIUM" = "EMS_E5"        
                   "koaf365:ENTERPRISEPACK" = "E3"             
                "koaf365:ENTERPRISEPREMIUM" = "E5"          
                        "koaf365:FLOW_FREE" = "Microsoft Flow"            
                      "koaf365:INTUNE_A_VL" = "Intune Volume License"        
                       "koaf365:MCOMEETADV" = "Skype For Business PSTN Conferencing"   
        "koaf365:MICROSOFT_BUSINESS_CENTER" = "Microsoft Business Center"          
                     "koaf365:POWER_BI_PRO" = "Power BI PRO"         
                "koaf365:POWER_BI_STANDARD" = "Power BI Standard"    
        "koaf365:POWERAPPS_INDIVIDUAL_USER" = "Powerapps Individual User"           
                  "koaf365:POWERAPPS_VIRAL" = "Microsoft PowerApps and Logic flows"        
                   "koaf365:PROJECTPREMIUM" = "Project Online Premium"        
                     "koaf365:STANDARDPACK" = "E1"                
                           "koaf365:STREAM" = "Stream"         
                "koaf365:VISIOONLINE_PLAN1" = "Visio Online Plan 1"           
              "koaf365:WACONEDRIVESTANDARD" = "OneDrive For Business Plan 1"       
                      "koaf365:WIN_DEF_ATP" = "Windows Defender Avanced Threat Protection"
    }
    
    #Initializing users licenses config table
    $Us = @()

    #Getting all users list    
    $Users = Get-MsolUser -All | ?{$_.isLicensed -eq $true}

    ForEach($u in $Users){          
   
        #Getting assigned user License Plans        
        $O365Licenses = @()        
        $u.Licenses.AccountSkuId | % {            
            $O365Licenses += $LicensePlan."$_"        
        }        
        $O365Licenses = [string]::Join(',',$O365Licenses)            
    
        #Getting user enabled license features        
        $EnabledFeature = ($u.Licenses | Select -ExpandProperty ServiceStatus | ?{($_.ProvisioningStatus -eq "Success")}).ServicePlan.ServiceName        
        If (($EnabledFeature -ne $null) -and ($EnabledFeature.GetType().BaseType.Name -eq "Array")){                       
            $EnabledFeature = [string]::Join(',',$EnabledFeature)        
        }
        
        #Getting user license disabled features        
        $DisabledFeature = ($u.Licenses | Select -ExpandProperty ServiceStatus | ?{($_.ProvisioningStatus -eq "Disabled")}).ServicePlan.ServiceName        
        If (($DisabledFeature -ne $null) -and ($DisabledFeature.GetType().BaseType.Name -eq "Array")){                 
            $DisabledFeature = [string]::Join(',',$DisabledFeature)        
        }

        #Updating users Licenses config table       
        $u | Add-Member -MemberType NoteProperty -Name EnabledFeature -Value $EnabledFeature -Force        
        $u | Add-Member -MemberType NoteProperty -Name DisabledFeature -Value $DisabledFeature -Force        
        $u | Add-Member -MemberType NoteProperty -Name O365Licenses -Value $O365Licenses -Force                 
        $Us += $u

    }

    #Exporting user License config    
    $Us | Select userPrincipalName, O365Licenses, EnabledFeature, DisabledFeature | Export-Csv UserLicensesConfig.csv -NoTypeInformation -Delimiter ";" -Encoding UTF8
}

koaf365 : is the company name that I provided when I enrolled in Office 365, and is unique for my organization.

When you run the script :

> Export-UsersLicensesConfig

The generated UserLicensesConfig.csv file content should be like below.

UserPrincipalName O365Licenses EnabledFeature DisabledFeature
user1@agbo.blog E1 BPOS_S_TODO_1, FORMS_PLAN_E1, STREAM_O365_E1, Deskless, FLOW_O365_P1, POWERAPPS_O365_P1, TEAMS1, SHAREPOINTWAC, PROJECTWORKMANAGEMENT, SWAY, MCOSTANDARD, SHAREPOINTSTANDARD, EXCHANGE_S_STANDARD YAMMER_ENTERPRISE
user2@agbo.blog OneDrive For Business Plan 1 FORMS_PLAN_E1,SWAY,SHAREPOINTWAC,ONEDRIVESTANDARD
user3@agbo.blog E1,OneDrive For Business Plan 1 BPOS_S_TODO_1, STREAM_O365_E1, Deskless, FLOW_O365_P1, POWERAPPS_O365_P1, TEAMS1,PROJECTWORKMANAGEMENT,YAMMER_ENTERPRISE, MCOSTANDARD, SHAREPOINTSTANDARD, EXCHANGE_S_STANDARD, FORMS_PLAN_E1, SWAY, SHAREPOINTWAC, ONEDRIVESTANDARD FORMS_PLAN_E1, SHAREPOINTWAC, SWAY
user4@agbo.blog E1,Microsoft Business Center BPOS_S_TODO_1, STREAM_O365_E1, Deskless, FLOW_O365_P1, POWERAPPS_O365_P1, TEAMS1, PROJECTWORKMANAGEMENT, YAMMER_ENTERPRISE, MCOSTANDARD, SHAREPOINTSTANDARD, EXCHANGE_S_STANDARD, MICROSOFT_BUSINESS_CENTER FORMS_PLAN_E1, SHAREPOINTWAC, SWAY
user5@agbo.blog OneDrive For Business Plan 1 FORMS_PLAN_E1,  SWAY, SHAREPOINTWAC, ONEDRIVESTANDARD

 

There you go 🙂 !!!

Déployer Office 365 ProPlus 2016 – Partie 1 : Installation de l’Agent Intune

Je partage avec vous ce retour d’expérience d’un projet de Migration Office 365. Dans ce projet l’une des phases essentielles était le déploiement de la suite Office 365 ProPlus 2016.

Nous nous sommes appuyés sur des agents Intune pour pousser l’installation d’Office depuis internet. Mais c’est quoi Intune ? 🙂

Microsoft Intune est un outil de gestion de périphériques depuis le Cloud Microsoft. Il permet entre autre de faire des installations d’applications sur des appareils et de gérer leurs configurations. L’Agent intune est un programme qui permet aux appareils de se connecter à la plateforme Microsfot Intune.

Dans notre cas, nous utilisons Intune pour faire l’installation de Microsoft Office 365 ProPlus 2016 sur les postes.

Disposer d’Office 365 en production ou en test est un pré requis pour ce déploiement car Intune est étroitement lié à votre abonnement Office 365.

Etape 1 : Téléchargement de l’agent Intune

Se connecter au portail de gestion de Microsoft Intune et télécharger l’agent.

DownloadIntuneAgent

Utiliser la commande ci-dessous pour extraire les .msi sur un partage réseau ou un répertoire de votre PC, ce format nous sera utile pour un déploiement par GPO. Pour un déploiement par GPO, vaut mieux le copier sur un share accessible par les PCs sur lesquels vous devez intaller l’agent.

Microsoft_Intune_Setup.exe/Extract "\\kingo.local\sysvol\kingo.local\scripts\"

Je choisi de faire l’extraction dans le répertoire Scripts du sysvol d’un de mes contrôleurs de domaine afin que ces fichiers soient répliqués et disponibles sur tous mes DCs.

intuneAgentMsi2

Le fichier MicrosoftIntune.accountcert est le certificat qui lie l’agent intune à votre abonnement Microsoft Office 365. Il doit être présent dans le même répertoire que le fichier .msi d’installation et en aucun cas ne doit être modifié sinon l’installation échoue.

Bien entendu le x64 est destiné au architecture 64 bits et les x86 pour PCs à processeur 32 bits.

Etape 2 : Installer l’agent intune

Installation manuelle

Depuis le répertoire « \\kingo.local\sysvol\kingo.local\scripts\ », double-cliquer sur le fichier « .msi » selon l’architecture du processeur de votre PC.

InstallIntune1

Cliquer sur Next et poursuivre avec l’assistant pour l’installation, hyper intuitif 🙂 croyez-moi.

InstallIntune2

Cliquer sur « Finish » pour terminer l’installation. vous pouvez observer l’icône de l’agent Intune dans la barre des tâches.

AgentIntuneBareDesTaches

Installation à l’aide d’une GPO

Créer et rattacher les GPOs à l’unité d’organisation qui comporte les PCs sur lesquels l’on souhaite déployer les agents intune.

GPOIntune1

Configuration des filtres WMI

J’ai rattaché un filtre wmi à chaque GPO pour cibler les postes selon leur processeur (x86 ou x64).

Le filtre win_32bits (x86)

SELECT AddressWidth FROM Win32_Processor WHERE AddressWidth =’32’

Le filtre win_64bits

SELECT AddressWidth FROM Win32_Processor WHERE AddressWidth =’64’

Ajout du .msi d’intallation de l’agent intune à la GPO

Configurer l’option de déploiement de la GPO avec le package .msi qu’on qui se trouve sur le sysvol de notre contrôleur de domaine.

GPOAssignClientIntune2

Lors du rattachement du package, choisir « Assigner ».

GPOAssignClientIntune3

L’installation débutera après récupération des paramètres de la GPO puis redémarrage du PC.

Paramètres de GPO optionnels

Les paramètres de GPO suivants peuvent être nécessaires pour garantir l’installation de l’agent :

Computer Configuration > Policies > Administrative Templates > Windows Components> Window Installer > Always install with elevated privileges
Computer Configuration > Policies > Administrative Templates > System > Logon > Always wait for the network at computer startup and logon
Computer Configuration > Policies > Administrative Templates > System > Group Policy > Software Installation policy processing (check « Allow processing across a slow network connection »)

GPOParamSuppl

Il est possible de modifier également l’intervalle mise à jour des GPOs à travers le paramètre:

Computer Configuration>Administrative Templates>System>Group Policy>Group Policy refresh interval 

Attention ce paramètre ne doit pas être configuré avec un temps trop réduit sinon il peut causer une surcharge du réseau.