15/11/2024

Office 365PowerShell

Office 365 : attribuer des licences avec PowerShell

I. Présentation

Dans ce tutoriel, nous allons voir comment attribuer des licences Office 365 / Microsoft 365 à des utilisateurs à partir de commandes PowerShell. Idéal pour automatiser cette tâche, même s'il y a d'autres façons de faire.

Pour suivre ce tutoriel, vous avez besoin d'une console PowerShell avec un accès sur votre tenant Office 36 et au minimum une licence disponible sur le tenant. En complément, vous devez avoir le module MSOnline de PowerShell sur votre machine.

Sur le sujet des licences avec Office 365 / Microsoft 365, je vous recommande la lecture de ces deux articles en complément :

II. Attribuer une licence Office 365 avec PowerShell

Comme d'habitude, la première étape consiste à se connecter à son tenant :

Connect-MsolService

Ensuite, suivez les étapes ci-dessous.

A. Lister les licences disponibles sur Office 365

il faut lister les licences enregistrées sur votre tenant. C'est important pour récupérer le nom de la licence à attribuer à nos utilisateurs. En effet, le nom d'affichage visible sur l'interface Web n'a rien à voir avec le nom en PowerShell, qui est plutôt un nom technique.

Get-MsolAccountSku

Voici un exemple de sortie :

AccountSkuId                          ActiveUnits WarningUnits ConsumedUnits
------------                          ----------- ------------ -------------
itconnect:ENTERPRISEPACKPLUS_FACULTY  160         0            151 
itconnect:STANDARDWOFFPACK_STUDENT    1000000     0            1842

Quant à la signification, voici pour les deux licences ci-dessus :

ENTERPRISEPACKPLUS_FACULTY = Office 365 Plan A3 pour les enseignants

STANDARDWOFFPACK_STUDENT = Office 365 Plan A1 pour les étudiants

Pour vous aider et avoir la correspondance entre les noms techniques et les noms commerciaux, je vous invite à consulter cette page : Microsoft Docs

Dans cet exemple, je vais attribuer la licence "itconnect:STANDARDWOFFPACK_STUDENT" à un utilisateur.

B. Affecter la licence avec Set-MsolUserLicense

Commençons par affecter le nom de la licence à une variable.

$Licences = "itconnect:STANDARDWOFFPACK_STUDENT"

Si l'on veut attribuer plusieurs licences en même temps, c'est possible. Voici un exemple :

$Licences = "itconnect:ENTERPRISEPACKPLUS_FACULTY","itconnect:STANDARDWOFFPACK_STUDENT"

Toutefois, attention si vous affectez plusieurs licences à un utilisateur, car il peut y avoir des conflits entre certaines licences. Faites un test sur un utilisateur pour valider.

Pour affecter cette licence à l'utilisateur "[email protected]", je vais m'appuyer sur le cmdlet Set-MsolUserLicense. L'option -AddLicenses va permettre de spécifier la ou les licences à attribuer.

Set-MsolUserLicense -UserPrincipalName "[email protected]" -AddLicenses $Licences

Si l'on veut associer cette licence à tous les utilisateurs du tenant qui n'ont pas de licences, on pourra s'appuyer sur Get-MsolUser et l'option -UnlicensedUsersOnly.

Get-MsolUser -UnlicensedUsersOnly -All | Set-MsolUserLicense -AddLicenses $Licences

Si un utilisateur n'a pas de licence, la propriété isLicensed retournée par Get-MsolUser sera égale à False. Après l'exécution de la commande ci-dessus, elle passera sur True puisque l'utilisateur aura une licence.

On peut être plus précis puisque l'on peut afficher la ou les licences affectées à un utilisateur :

(Get-MsolUser -UserPrincipalName "[email protected]").Licenses.AccountSkuId

C. Retirer une licence Office 365 avec PowerShell

Pour finir, un petit bonus pour effectuer l'opération inverse, à savoir retirer la licence Office 365 associée à un utilisateur. Pour cela, la commande Set-MsolUserLicense est nécessaire sauf que l'on va utiliser un paramètre différent : -RemoveLicenses.

Pour supprimer l'affectation de la licence "itconnect:STANDARDWOFFPACK_STUDENT", il suffira de faire :

$Licences = "itconnect:STANDARDWOFFPACK_STUDENT"
Set-MsolUserLicense -UserPrincipalName "[email protected]" -RemoveLicenses $Licences

Si l'on veut retirer toutes les licences attribuées à un utilisateur, peu importe le nom, on peut s'appuyer sur une petite boucle :

$UPN = "[email protected]" 

(Get-MsolUser -UserPrincipalName $UPN).Licenses.AccountSkuId | 
   foreach{
      Set-MsolUserLicense -UserPrincipalName $UPN -RemoveLicenses $_
   }

À vous de jouer !

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.