Office 365 : attribuer des licences avec PowerShell
Sommaire
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 :
- Attribuer des licences Office 365 avec un groupe Active Directory
- Surveiller la consommation des licences Office 365
- Lister les utilisateurs qui disposent d'une licence Office 365 spécifique
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 !