Automatizzare l’inventario delle licenze Microsoft 365: export utenti e assegnazioni con Microsoft Graph API

da | Mag 28, 2026

 

Chiunque abbia mai gestito un tenant Microsoft 365 con qualche centinaio di utenti conosce bene la sensazione: aprire l’interfaccia di amministrazione, navigare tra pannelli e sottomenu e cercare di capire (in tempi ragionevoli) chi ha quale licenza, quante ne sono state assegnate e quante restano disponibili.

Un’operazione all’apparenza banale che ripetuta ogni mese o ogni volta che arriva una richiesta dall’ufficio acquisti diventa rapidamente una fonte di frustrazione silenziosa.

Il problema non è la complessità tecnica in sé ma la mancanza di automazione. Il portale di amministrazione è pensato per operazioni puntuali non per estrarre dati strutturati in modo ripetibile e affidabile.

Esportare manualmente un elenco di utenti con le relative assegnazioni di licenze significa tempo sprecato, rischio di errori e soprattutto un processo che non scala.

È qui che entra in gioco Microsoft Graph API: un’interfaccia unificata e potente che consente di interrogare l’intero ecosistema Microsoft 365 a livello programmatico ottenendo in pochi secondi le stesse informazioni che il portale restituisce in molti clic.

Con le giuste chiamate API è possibile costruire un inventario completo e aggiornato di tutti gli utenti del tenant corredato delle SKU di licenza assegnate dei service plan attivi e dello stato di ogni sottoscrizione.

In questo articolo vedremo come automatizzare l’intero processo dall’autenticazione tramite un’applicazione registrata su Azure Active Directory fino alla generazione di un export strutturato e pronto per essere analizzato o integrato nei propri strumenti di reporting.

Niente più copia-incolla dal portale: solo dati, script e un inventario sempre aggiornato con un singolo comando.

 

PREREQUISITI

Sul PC da cui si eseguirà lo script:

  • Windows con PowerShell 5.1 o superiore (già incluso in Windows 10/11)
  • Connessione internet
  • Modulo Microsoft.Graph installato

Su Azure / Microsoft 365:

  • Accesso al portale Azure (portal.azure.com) con un account Global Admin o Application Admin
  • Un’App Registration creata in Azure AD con:
    • Le permission di tipo Application (non Delegated) per User.Read.All, Directory.Read.All e Organization.Read.All
    • L’Admin Consent concesso per tutte e tre le permission
    • Un Client Secret generato e copiato
    • I tre valori disponibili: Tenant ID, Client ID e Client Secret

Permessi minimi sull’account che crea l’App Registration:

  • Ruolo Global Administrator oppure Application Administrator nel tenant M365

CREAZIONE E CONFIGURAZIONE DELL’APP SUL TENANT AZURE

Richiamare da un qualsiasi browser portal.azure.com

Cercare App Registration

Cliccare su New Registration

Dare un nome all’App (Es: ExportLicense) quindi cliccare su Register

Copiare l’Application (client) ID e il Directory (tenant) ID

Cliccare su Add a certificate or secret

Cliccare su Certificates & Secrets quindi New Client Secret

Inserire la Descrizione e la Scadenza quindi cliccare al fondo della pagina Add

Copiare il Value della Secret

Cliccare su API Permissions quindi Add a Permissions

Selezionare Microsoft Graph

Cliccare su Application Permissions

Cercare il valore User.Read.All quindi selezionarlo

Cercare il valore Directory.Read.All quindi selezionarlo

Cercare il valore Organization.Read.Al quindi selezionarlo

Al fondo della pagina cliccare su Add Permissions

Da questa schermata è possibile notare che le permissions non sono state Consentite da Admin

Cliccare su Grant Admin Consent quindi accertiarsi che tutte le permissions abbiano lo stato Granted col bollino verde

 

INSTALLAZIONE DEL MODULO MICROSOFT GRAPH

Per poter utilizzare lo script è necessario installare il modulo Microsoft.Graph dalla gallery ufficiale di Microsoft (PowerShell Gallery) con il comando:

In pratica senza questo comando i cmdlet come Connect-MgGraph, Get-MgUser, Get-MgSubscribedSku non esisterebbero in PowerShell e lo script non potrebbe girare.

💡 Si tratta di un’operazione sicura e ufficiale: il modulo è pubblicato e mantenuto direttamente da Microsoft. Scarica circa 200 MB di file nella cartella profilo dell’utente (C:\Users\tuonomeutente\Documents\PowerShell\Modules), senza modificare file di sistema.

⚠️ Potrebbero volerci anche 10/15 minuti al termine dell’installazione. Non chiudere o bloccare la finestra Powershell

 

SCRIPT PER IL REPERIMENTO DELLE SKU DEL TENANT

La prima cosa da fare è eseguire uno script rapido che interroga il tuo tenant e restituisce tutte le SKU con il loro codice tecnico da aggiungere allo script successivo.

Lo script fa due cose:

Mostra una tabella con tutte le SKU (codice, GUID, totali, usate)

Genera automaticamente il blocco $skuNames pronto da copiare in Export-M365Licenses.ps1 con i codici tecnici come placeholder — dovrai solo sostituire il valore a destra con il nome leggibile che preferisci per quelle SKU che non riconosci.

Di seguito il listato dello script Powershell:

Salvare il file col nome Get-TenantSKUs.ps1

Sostituire le seguenti righe con i codici presi in precedenza:

$TenantId = “INSERISCI-IL-TUO-TENANT-ID”
$ClientId = “INSERISCI-IL-TUO-CLIENT-ID”
$ClientSecret = “INSERISCI-IL-TUO-CLIENT-SECRET”

⚠️ Il secret è visibile solo al momento della creazione. Se non l’hai copiato, dovrai eliminarlo e crearne uno nuovo.

 

COPIA DELLE SKU NELLO SCRIPT

Di seguito un output che potremmo vedere dopo aver eseguito il Powershell Get-TenantSKUs.ps1:

A questo punto prima di copiare le SKU nello script modificarle mettendo a destra dell’uguale una descrizione parlante del software:

 

SCRIPT CHE ESPORTA LE LICENZE CON LE RELATIVE UTENZE ASSEGNATARIE

Di seguito lo script PowerShell che usa Microsoft Graph per estrarre tutte le licenze del tenant con gli utenti associati e li esporta in CSV (apribile direttamente in Excel).

E’ possibile eseguire lo script nelle due modalità di seguito:

Il File CSV contiene:

Nome Utente / UPN: Identità dell’utente
Account Abilitato: Se l’account è attivo
Reparto / Mansione: Info organizzative
Licenza / Codice SKU: Nome leggibile e codice tecnico
Company Name: Azienda
Totali / Consumate / Disponibili: Contatori per ogni SKU nel tenant

Una riga per ogni combinazione utente–licenza: se un utente ha 3 licenze, avrà 3 righe. Così è possibile filtrare e pivotare facilmente in Excel.

Di seguito lo script Powershell:

 

Se tutto è andato a buon fine dovremmo vedere una schermata come quella dell’immagine sovrastante

ANALISI DEL FILE CSV

Nel file CSV trovi una riga per ogni combinazione utente-licenza. Le colonne sono:

Nome Utente: Mario Rossi
UPN: [email protected]
Account Abilitato: True / False
Azienda: Società 1
Reparto: IT
Mansione: System Administrator
Paese Utilizzo: IT
Licenza: Microsoft 365 E3
Codice SKU: ENTERPRISEPACK
Totali Tenant: 50
Consumate: 43
Disponibili: 7

Di seguito uno screenshot del file excel

 

Download “Export-M365Licenses.zip” Export-M365Licenses.zip – Scaricato 0 volte – 3,68 KB

 

Download “Get-TenantSKUs.zip” Get-TenantSKUs.zip – Scaricato 0 volte – 1,19 KB

Articoli Recenti

Veeam Backup

Monitoring

Friends

  • My English Lab  English School
  • ChrSystem   Servizi ICT
  • Since 01  Kreative Graphics

Database

Networking

Autori

  • Raffaele Chiatto  Amministratore
  • Marco Valle  Autore
  • Angelo Lauria  Autore
  • Edoardo Prot  Autore
  • Davide D’Urso  Autore
Raffaele Chiatto

Raffaele Chiatto

Sono Raffaele Chiatto, un appassionato di informatica a 360 gradi. Tutto è iniziato nel 1996, quando ho scoperto il mondo dell'informatica grazie a Windows 95, e da quel momento non ho più smesso di esplorare e imparare. Ogni giorno mi dedico con curiosità e passione a scoprire le nuove frontiere di questo settore in continua evoluzione.

Related Post

0 commenti

Invia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Virtualizzazione

Linux

Microsoft

Apple

Backup

Database

Security

Automazione