- PowerShell 93.8%
- HTML 4.2%
- Batchfile 2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| Exemples | ||
| Logs | ||
| ADAT-Microsoft365-License-Viewer.ps1 | ||
| Catalogue-Licences.csv | ||
| CHANGELOG.md | ||
| Documentation-WikiJS.md | ||
| Lancer-License-Viewer-Diagnostic.cmd | ||
| Lancer-License-Viewer.cmd | ||
| MANIFEST-SHA256.txt | ||
| README.md | ||
| Tester-Exports.cmd | ||
| Tester-Syntaxe.ps1 | ||
| TESTS.md | ||
| VALIDATION.md | ||
ADAT Microsoft 365 License Viewer v0.3.1
Utilitaire Windows PowerShell/WinForms en lecture seule permettant de consulter, filtrer, sélectionner et exporter les licences Microsoft 365 retournées par Microsoft Graph.
La version 0.3.1 privilégie trois objectifs :
- une interface plus lisible et professionnelle ;
- une sélection exacte de plusieurs licences ;
- des rapports HTML et Markdown directement exploitables.
Nouveautés de la version 0.3.1
- nouvelle interface avec en-tête, cartes de synthèse et tableau allégés ;
- cinq indicateurs calculés sur la vue courante ;
- sélection multiple des licences dans une fenêtre dédiée ;
- sélection fondée sur le
SkuPartNumber, et non uniquement sur un nom commercial ; - recherche dans la fenêtre de sélection ;
- boutons Tout cocher et Tout décocher ;
- recalcul immédiat des totaux après chaque sélection ou filtre ;
- sélection multiple de lignes dans le tableau avec
CtrlouMaj; - représentation graphique du taux d'utilisation dans le tableau ;
- export HTML autonome, responsive et imprimable ;
- export Markdown compatible WikiJS et Joplin ;
- conservation de l'export CSV UTF-8 avec BOM ;
- possibilité d'exporter la vue filtrée ou uniquement les lignes sélectionnées dans le tableau.
Sécurité
L'application reste strictement en lecture seule.
Permission Microsoft Graph demandée :
LicenseAssignment.Read.All
Commandes Microsoft Graph utilisées :
Connect-MgGraph
Get-MgContext
Get-MgSubscribedSku -All
Disconnect-MgGraph
Aucune commande d'attribution, de retrait ou de modification de licence n'est présente.
L'application ne stocke :
- aucun mot de passe ;
- aucun jeton d'accès ;
- aucun secret client ;
- aucun certificat ;
- aucune information d'authentification persistante.
Prérequis
- Windows 10 ou Windows 11 ;
- Windows PowerShell 5.1 minimum ;
- PowerShell 7 possible sous Windows ;
- accès HTTPS à Microsoft Entra ID et Microsoft Graph ;
- compte autorisé à lire les informations de licences ;
- droit d'installation des modules pour l'utilisateur courant.
Modules nécessaires :
Microsoft.Graph.Authentication
Microsoft.Graph.Identity.DirectoryManagement
Installation manuelle :
Install-Module Microsoft.Graph.Authentication -Scope CurrentUser -Force -AllowClobber
Install-Module Microsoft.Graph.Identity.DirectoryManagement -Scope CurrentUser -Force -AllowClobber
Accès au tenant
Rôle Microsoft Entra recommandé :
Lecteurs d'annuaire / Directory Readers
Le rôle suivant est également adapté :
Lecteur général / Global Reader
Il n'est pas nécessaire d'utiliser un compte Administrateur général pour la consultation courante.
Selon la politique de consentement du tenant, une approbation administrative peut être demandée lors de la première connexion.
Arborescence
ADAT-Microsoft365-License-Viewer-v0.3.1\
├── ADAT-Microsoft365-License-Viewer.ps1
├── Catalogue-Licences.csv
├── Lancer-License-Viewer.cmd
├── Lancer-License-Viewer-Diagnostic.cmd
├── Tester-Syntaxe.ps1
├── Tester-Exports.cmd
├── README.md
├── Documentation-WikiJS.md
├── TESTS.md
├── VALIDATION.md
├── CHANGELOG.md
├── MANIFEST-SHA256.txt
├── Exemples\
│ ├── README.md
│ ├── Rapport-Licences-Exemple.html
│ └── Rapport-Licences-Exemple.md
├── Logs\
└── Tests-Exports\ (créé lors de l’auto-test)
Lancement
Lancement normal :
Lancer-License-Viewer.cmd
Lancement recommandé pour un premier test :
Lancer-License-Viewer-Diagnostic.cmd
Le lanceur diagnostic :
- conserve la console visible ;
- vérifie la syntaxe du script ;
- affiche les erreurs de démarrage ;
- conserve le code retour.
Périmètre recommandé
Le filtre initial est :
Licences utilisateur actives avec capacité (recommandé)
Il correspond à :
AppliesTo = User
CapabilityStatus = Enabled
PrepaidUnits.Enabled > 0
Autres périmètres :
- toutes les licences utilisateur ;
- tous les produits actifs disposant d'une capacité ;
- toutes les références retournées par Microsoft Graph.
Sélection exacte de plusieurs licences
Cliquer sur :
Choisir les licences...
La fenêtre affiche chaque produit sous la forme :
Microsoft 365 Business Premium [SPB]
Exchange Online Plan 1 [EXCHANGESTANDARD]
Le SkuPartNumber entre crochets rend la sélection non ambiguë, même lorsque deux noms commerciaux se ressemblent.
Dans la fenêtre de sélection :
- rechercher un nom ou une référence ;
- cocher plusieurs licences ;
- utiliser Tout cocher ou Tout décocher si nécessaire ;
- cliquer sur Appliquer.
Les cartes et le tableau sont recalculés immédiatement.
Le bouton Aucune retire temporairement toutes les licences exactes de la vue. Le bouton Réinitialiser restaure la sélection complète et le périmètre recommandé.
Calculs
Pour chaque référence :
Unités activées = PrepaidUnits.Enabled
Unités attribuées = ConsumedUnits
Unités disponibles = Unités activées - Unités attribuées
Taux d'utilisation = Unités attribuées / Unités activées × 100
Les cinq cartes sont calculées uniquement sur les lignes affichées :
- licences affichées ;
- unités activées ;
- unités attribuées ;
- unités disponibles ;
- taux d'utilisation global.
Le taux global est calculé à partir des sommes :
Somme des unités attribuées / somme des unités activées
Il ne s'agit pas de la moyenne des pourcentages de chaque produit.
Les produits restent indépendants. Les sommes globales donnent une vue de capacité, mais les unités de produits différents ne sont pas interchangeables.
Tableau
Le tableau est triable et accepte une sélection multiple de lignes.
| Colonne | Signification |
|---|---|
| Licence | Nom commercial local, sinon SkuPartNumber |
| Famille | Classement local du produit |
| Référence Microsoft | SkuPartNumber exact |
| Cible | User ou Company |
| Statut | CapabilityStatus |
| Activées | PrepaidUnits.Enabled |
| Attribuées | ConsumedUnits |
| Disponibles | Activées moins attribuées |
| Utilisation | Pourcentage consommé et barre visuelle |
| État | État calculé par l'application |
Sélection de lignes :
- clic simple : une ligne ;
Ctrl + clic: plusieurs lignes indépendantes ;Maj + clic: une plage de lignes.
Recherche et filtres
La recherche multi-mots porte sur :
- le nom commercial ;
- la famille ;
- le
SkuPartNumber; - la cible ;
- le statut ;
- l'état calculé.
Exemples :
business premium
exchange attention
power bi
Les filtres locaux ne déclenchent aucune nouvelle requête Microsoft Graph.
Exports
Cliquer sur :
Exporter le rapport...
Portée
Deux portées sont possibles :
- Vue filtrée : toutes les lignes actuellement visibles ;
- Lignes sélectionnées dans le tableau : uniquement les lignes choisies avec
CtrlouMaj.
HTML autonome
Format recommandé pour l'envoi, l'archivage et l'impression.
Le rapport contient :
- un en-tête avec le tenant, le compte et la date ;
- cinq cartes de synthèse ;
- le contexte des filtres ;
- un tableau responsive ;
- des badges d'état ;
- des barres d'utilisation ;
- une feuille de style intégrée ;
- aucune dépendance Internet.
Le fichier peut être ouvert dans Edge, Chrome ou Firefox et imprimé en PDF depuis le navigateur.
Markdown
Le rapport Markdown est directement copiable dans :
- WikiJS ;
- Joplin ;
- Forgejo ;
- GitHub ou GitLab ;
- un dépôt de documentation interne.
Il contient le contexte, la synthèse, le tableau des licences et la note expliquant que les produits ne sont pas interchangeables.
CSV
Le CSV détaillé reste disponible pour Excel ou un traitement automatisé.
Caractéristiques :
Séparateur : ;
Encodage : UTF-8 avec BOM
Catalogue des noms
Le fichier :
Catalogue-Licences.csv
utilise le format :
SkuPartNumber;NomLicence
Une référence inconnue n'est jamais supprimée. Son SkuPartNumber est affiché comme nom de secours.
Journaux
Emplacement principal :
C:\ProgramData\ADAT\Microsoft365-License-Viewer\Logs
Emplacement de secours :
Logs\
Le journal ne contient aucun mot de passe, jeton ou secret.
Limites connues
- Microsoft Graph
subscribedSkune fournit pas le prix ou la date contractuelle de renouvellement ; - le catalogue des noms commerciaux est local et doit être maintenu ;
- les familles sont un classement local ;
- les totaux additionnent des produits différents uniquement pour fournir une synthèse ;
- la version 0.3.1 n'affiche pas encore la liste nominative des utilisateurs licenciés.
Désinstallation
- fermer l'application ;
- supprimer le dossier du projet ;
- supprimer éventuellement les journaux dans
C:\ProgramData\ADAT\Microsoft365-License-Viewer; - conserver ou supprimer les modules Microsoft Graph selon les besoins des autres outils PowerShell.
🖥️ Affichage et mise à l’échelle Windows
La version 0.3.1 utilise des mises en page WinForms adaptatives. Les fenêtres principales, de sélection et d’export peuvent être redimensionnées. Les boutons conservent une hauteur minimale et leur texte doit rester visible avec une mise à l’échelle Windows de 100 %, 125 %, 150 % ou 175 %.
En cas d’affichage encore tronqué :
- maximiser la fenêtre principale ;
- agrandir la fenêtre concernée avec sa bordure ;
- vérifier Paramètres Windows > Système > Affichage > Mise à l’échelle ;
- relancer l’application après modification de l’échelle.
🔒 Informations présentes dans les exports
Les rapports HTML, Markdown et CSV n’affichent plus l’identifiant technique du tenant. Ils indiquent uniquement :
- le domaine d’organisation déduit du compte connecté ;
- le compte Microsoft utilisé ;
- la date de génération ;
- les filtres et la portée de l’export.
L’identifiant du tenant reste une donnée technique utilisée uniquement par la session Microsoft Graph et la journalisation de diagnostic.
🧪 Tester les exports sans accéder au tenant
Le fichier Tester-Exports.cmd lance un auto-test local avec deux licences entièrement fictives. Aucune connexion Microsoft Graph n’est effectuée.
Le test génère dans Tests-Exports :
Test-Rapport-Licences.html
Test-Rapport-Licences.md
Test-Rapport-Licences.csv
Cette vérification permet de confirmer sur le poste Windows que :
- PowerShell 5.1 sait construire les trois formats ;
- l’écriture UTF-8 avec BOM fonctionne ;
- les fichiers sont créés et non vides ;
- l’identifiant GUID du tenant n’apparaît pas dans les rapports.