Automatisation de l’optimisation des licences et des audits dans Microsoft 365
Par Mirko Peters ·
Bienvenue sur le blog du podcast ! Si vous avez déjà contemplé votre facture mensuelle de Microsoft 365 en vous demandant pourquoi vous payez des licences que personne n’a jamais utilisées…
Traduit automatiquement par IA à partir de l'article original. Lire l'original en anglais
Bienvenue de nouveau sur le blog du podcast ! Si vous avez déjà fixé votre facture mensuelle de logiciels Microsoft 365 en vous demandant pourquoi vous payez pour des sièges que personne n’a utilisés depuis six mois, vous n’êtes certainement pas le seul. La gestion des licences fait partie de ces coûts opérationnels cachés qui épuisent discrètement les budgets informatiques tout en créant des problèmes inutiles de conformité et de sécurité. Heureusement, des outils d’automatisation puissants sont à portée de main. Dans ce guide complet, nous verrons comment suivre, attribuer et révoquer des licences Microsoft 365 avec PowerShell afin de maîtriser les coûts, fluidifier l’intégration des utilisateurs et garantir une conformité rigoureuse sur l’ensemble de votre locataire. Si vous aimez les stratégies d’automatisation technique approfondies, n’hésitez pas à consulter notre épisode associé sur la façon de Exécuter toute votre pile en local avec .NET Aspire pour en savoir plus sur les flux de travail et les outils des développeurs.
Introduction à l’automatisation de l’optimisation des licences et des audits
Gérer un locataire Microsoft 365 manuellement est une recette assurée pour l’épuisement et les erreurs humaines. À mesure que les organisations grandissent, que les collaborateurs partent, que les services évoluent et que les besoins logiciels fluctuent fortement, les administrateurs finissent par accumuler des licences, continuer à payer d’anciens prestataires ou laisser des licences premium E5 attribuées à des comptes inactifs. En introduisant l’automatisation dans votre stratégie d’optimisation des licences, vous supprimez les approximations. PowerShell vous permet d’interroger les données du locataire, d’analyser les schémas d’utilisation et de récupérer par programmation les ressources inutilisées, transformant une corvée administrative réactive en un garde-fou financier proactif.
Prérequis et configuration de l’environnement
Avant d’écrire la moindre ligne de code de récupération de licences, vous devez préparer votre environnement. Une préparation adéquate garantit que vos scripts s’exécutent sans heurts, sans se heurter à des blocages d’autorisations ou à des conflits d’assemblages de modules.
Systèmes pris en charge
Vous pouvez exécuter vos scripts de gestion Microsoft 365 sous Windows comme sous macOS. La plupart des administrateurs privilégient Windows 10 ou une version ultérieure, tandis que les utilisateurs de Mac peuvent utiliser PowerShell Core. Vérifiez toujours que votre système d’exploitation prend en charge les dernières versions des packages modulaires. Si vous rencontrez des erreurs d’intégration de Web Account Manager (WAM) ou des conflits de dépendances d’assemblages lors de la connexion aux services, l’utilisation de solutions de contournement temporaires, comme le commutateur DisableWAM, peut vous permettre de faire avancer vos scripts.
Autorisations et rôles
La sécurité est primordiale. N’exécutez jamais de scripts d’administration avec un compte utilisateur standard. Assurez-vous que l’identité qui exécute le script détient les rôles appropriés, tels que Administrateur général, Administrateur des utilisateurs ou Administrateur des licences. Respecter le principe du moindre privilège garantit que vos identifiants d’administration ne disposent que des autorisations strictement nécessaires pour effectuer les audits et les attributions de licences.
Liste de contrôle de configuration de l’environnement
- Ouvrez Windows PowerShell en tant qu’administrateur.
- Définissez la galerie PowerShell comme dépôt approuvé :
Set-PSRepository -Name 'PSGallery' -InstallationPolicy Trusted - Installez le fournisseur NuGet requis si vous y êtes invité.
- Configurez la stratégie d’exécution de vos scripts :
Set-ExecutionPolicy RemoteSigned
Installation des modules PowerShell essentiels pour Microsoft 365
Pour gérer efficacement les utilisateurs et les licences, vous devez disposer localement des bons outils. L’écosystème Microsoft a fortement évolué vers des SDK unifiés, mais plusieurs modules de base restent essentiels pour les tâches administratives quotidiennes.
Présentation des modules
- Microsoft.Graph : le module unifié moderne qui remplace les outils historiques comme MSOnline et AzureAD.
- ExchangeOnlineManagement : indispensable pour la gouvernance des boîtes aux lettres, la conversion des boîtes partagées et le suivi du flux de messagerie.
- MicrosoftTeams : indispensable pour gérer les charges de travail de collaboration et les stratégies de réunion.
Étapes d’installation
Vous pouvez installer les modules modernes principaux en exécutant les commandes suivantes dans une invite PowerShell élevée :
Install-Module -Name Microsoft.Graph -Scope CurrentUser -Force
Install-Module -Name ExchangeOnlineManagement -Scope CurrentUser -Force
Install-Module -Name MicrosoftTeams -Scope CurrentUser -ForceVérifiez toujours vos installations avec Get-InstalledModule pour vous assurer que des versions conflictuelles ne perturbent pas vos runbooks d’automatisation.
Connecter PowerShell à votre locataire Microsoft 365
Établir une connexion sécurisée et fiable à votre locataire est l’étape suivante et essentielle. Les normes d’authentification modernes exigent des approches robustes, en particulier lorsque les scripts s’exécutent sans surveillance ou selon une planification.
Options d’authentification
Les connexions interactives conviennent parfaitement aux tâches d’administration rapides et ponctuelles, mais les scripts automatisés en arrière-plan exigent des alternatives sécurisées. L’authentification par certificat ou l’utilisation d’identités managées vous permet de vous connecter en toute sécurité, sans intégrer de mots de passe en clair dans vos fichiers de script.
Se connecter à Graph et aux services
Pour vous connecter au backend Microsoft Graph afin de gérer les utilisateurs et les licences, utilisez la commande suivante :
Connect-MgGraph -Scopes "User.ReadWrite.All", "Organization.Read.All"Pour les charges de travail spécifiques à Exchange et la configuration des boîtes aux lettres, établissez votre session à l’aide de la commande suivante :
Connect-ExchangeOnlineUne fois que votre script a terminé ses opérations par lots, pensez à fermer votre session en exécutant Disconnect-ExchangeOnline ou Disconnect-MgGraph.
Audit des sièges inutilisés et inventaire des licences
L’optimisation des licences commence par la visibilité. Vous ne pouvez pas récupérer des sièges si vous ne savez pas qui les utilise ni qui les a abandonnés. Avec PowerShell, vous pouvez extraire des rapports d’inventaire complets détaillant les références SKU attribuées ainsi que les horodatages de dernière connexion.
Vérifier les références SKU souscrites
Pour contrôler le nombre total de licences achetées par votre locataire par rapport aux quantités disponibles, exécutez la commande suivante :
Get-MgSubscribedSku | Select-Object SkuId, SkuPartNumber, @{Name="Total";Expression={$_.ConsolidatedStatus}}, @{Name="Assigned";Expression={$_.AssignedUnits}}Rechercher les utilisateurs inactifs
Repérer les comptes qui ne se sont pas authentifiés depuis plus de 90 jours est le moyen le plus rapide de réduire les dépenses cloud inutiles. Vous pouvez filtrer les listes d’utilisateurs pour identifier les comptes dormants :
$Threshold = (Get-Date).AddDays(-90)
Get-MgGet-MgUser -All -Property Id, DisplayName, UserPrincipalName, SignInActivity | Where-Object { $_.SignInActivity.LastSignInDateTime -lt $Threshold }Exporter ces données dans un fichier CSV vous permet de présenter à la direction informatique des indicateurs clairs de réduction des coûts avant d’effectuer des suppressions de licences en masse.
Utiliser Set-MgUserLicense pour attribuer et révoquer des licences
Une fois les sièges sous-utilisés ou les nouveaux collaborateurs à intégrer identifiés, l’applet de commande Set-MgUserLicense devient votre principal outil d’ajustement.
Attribuer des licences par programmation
Pour attribuer une référence SKU de produit spécifique à un nouvel utilisateur, vous construisez un objet d’attribution de licence contenant le SkuId cible :
$Params = @{
AddLicenses = @(
@{
SkuId = "your-sku-guid-here"
}
)
RemoveLicenses = @()
}
Set-MgUserLicense -UserId "alex.johnson@contoso.com" -BodyParameter $ParamsRévoquer les licences inutilisées
Pour récupérer des licences auprès de comptes dormants ou de collaborateurs ayant quitté l’entreprise, vous inversez l’opération en transmettant l’identifiant SKU dans le paramètre de tableau RemoveLicenses, ce qui garantit que votre organisation cesse immédiatement de payer une capacité cloud inutilisée.
Automatiser les flux de travail d’arrivée et de départ des collaborateurs
Le provisionnement et le déprovisionnement manuels des utilisateurs engendrent des délais importants et des risques de sécurité. En scriptant vos flux d’arrivée et de départ, vous garantissez que les licences sont attribuées dès qu’un collaborateur rejoint l’entreprise et révoquées immédiatement le jour de son départ.
Un script de départ automatisé peut désactiver le compte utilisateur, retirer ses licences, convertir sa boîte aux lettres en ressource partagée et exporter les journaux d’audit vers un emplacement de stockage sécurisé, le tout dans un seul bloc d’exécution continu. Ce niveau de synchronisation élimine le gaspillage de licences et préserve la posture de sécurité de l’organisation.
Bonnes pratiques de sécurité et moindre privilège
L’automatisation confère un pouvoir considérable, qui doit donc être encadré de près. Respecter des principes de sécurité stricts protège votre locataire contre les erreurs de configuration accidentelles et l’exécution malveillante de scripts.
- Accès à moindre privilège : ne accordez jamais les droits d’administrateur global aux comptes de service automatisés. Limitez strictement les autorisations à ce dont le script a réellement besoin.
- Sécurité des identifiants : ne stockez jamais de mots de passe en clair dans les scripts. Utilisez Azure Key Vault, des identités managées ou l’authentification par certificat.
- Journalisation complète : mettez en place des blocs try/catch robustes et enregistrez les étapes d’exécution des scripts dans des journaux locaux ou cloud pour une traçabilité complète.
Résoudre les erreurs courantes de licences et de connexion
Même les administrateurs chevronnés rencontrent parfois des obstacles lors de l’exécution de scripts d’automatisation Microsoft 365. Savoir gérer ces erreurs vous fera gagner des heures de frustration.
- Erreurs de refus d’autorisation : vérifiez que le compte qui exécute le script détient les rôles d’annuaire Azure AD requis et que votre connexion Graph a demandé les étendues de consentement correctes.
- Échecs d’attribution de licence : assurez-vous que l’utilisateur cible dispose d’un « emplacement d’utilisation » défini. Microsoft 365 rejettera les attributions de licence si le pays de l’utilisateur n’est pas renseigné.
- Conflits de modules : si des applets de commande échouent en raison de versions de modules incompatibles, désinstallez complètement les anciens modules (comme MSOnline) et standardisez votre environnement sur le SDK Microsoft Graph moderne.
Conclusion
L’automatisation de l’optimisation des licences et des audits dans Microsoft 365 permet de combler le fossé entre une administration informatique efficace et une gestion financière intelligente. En vous appuyant sur PowerShell et des cmdlets comme Set-MgUserLicense, vous pouvez éliminer les dépenses logicielles inutiles, appliquer des exigences strictes de conformité en matière de sécurité et rationaliser les flux d’administration des utilisateurs à l’échelle de votre entreprise. Si vous souhaitez élargir vos horizons techniques vers les outils modernes et la gestion de l’infrastructure, consultez notre épisode associé sur la façon d’exécuter votre pile complète en local avec Run Your Full Stack Locally with .NET Aspire. Restez proactif, sécurisez vos scripts et transformez votre locataire Microsoft 365 en un moteur bien huilé et optimisé sur le plan des coûts !