Automatizzare l'ottimizzazione delle licenze e gli audit in Microsoft 365
By Mirko Peters ·
Bentornato nel blog del podcast! Se ti è mai capitato di guardare la fattura mensile di Microsoft 365 chiedendoti perché paghi licenze per utenti che non vengono usati da sei mesi, …
Automatically translated with AI from the original post. Read the English original
Bentornato nel blog del podcast! Se ti è mai capitato di guardare la fattura mensile di Microsoft 365 chiedendoti perché paghi licenze per utenti che non vengono usati da sei mesi, non sei certo il solo. La gestione delle licenze è uno di quei costi operativi nascosti che erodono silenziosamente il budget IT, creando allo stesso tempo inutili problemi di conformità e sicurezza. Per fortuna, abbiamo a portata di mano potenti strumenti di automazione. In questa guida completa vediamo come tenere traccia, assegnare e revocare le licenze di Microsoft 365 con PowerShell, per controllare i costi, semplificare l'onboarding e garantire una rigorosa conformità in tutto il tenant. Se ami approfondire le strategie di automazione tecnica, non perdere l'episodio correlato su come Run Your Full Stack Locally with .NET Aspire, con approfondimenti su flussi di lavoro e strumenti per sviluppatori.
Introduzione all'automatizzazione dell'ottimizzazione delle licenze e degli audit
Gestire manualmente un tenant di Microsoft 365 è una ricetta sicura per il burnout e per gli errori umani. Con la crescita di un'organizzazione, le persone cambiano ruolo o lasciano l'azienda, i reparti si riorganizzano e i requisiti software variano continuamente. Se non si interviene, gli amministratori finiscono per accumulare licenze inutilizzate, continuare a pagare ex collaboratori o lasciare licenze E5 premium assegnate ad account inattivi. Introducendo l'automazione nella strategia di ottimizzazione delle licenze si elimina il margine di approssimazione. PowerShell permette di interrogare i dati del tenant, analizzare i modelli di utilizzo e recuperare in modo programmatico le risorse non utilizzate, trasformando un'attività amministrativa reattiva in una tutela finanziaria proattiva.
Prerequisiti e configurazione dell'ambiente
Prima di scrivere una sola riga di codice per il recupero delle licenze, occorre preparare l'ambiente. Una preparazione adeguata garantisce che gli script vengano eseguiti senza intoppi per problemi di autorizzazioni o conflitti tra moduli.
Sistemi supportati
Gli script di gestione di Microsoft 365 possono essere eseguiti sia su sistemi Windows sia su macOS. La maggior parte degli amministratori preferisce Windows 10 o versioni successive, mentre gli utenti Mac possono usare PowerShell Core. Verificate sempre che il sistema operativo supporti gli ultimi pacchetti modulari. Se durante la connessione ai servizi si verificano errori di integrazione con Web Account Manager (WAM) o conflitti di dipendenze di assembly, è possibile usare soluzioni temporanee come l'opzione DisableWAM per far proseguire gli script.
Autorizzazioni e ruoli
La sicurezza è fondamentale. Non eseguite mai script amministrativi con un account utente standard. Assicuratevi che l'identità con cui eseguite lo script disponga dei ruoli appropriati, come Amministratore globale, Amministratore utenti o Amministratore licenze. Attenersi al principio del privilegio minimo garantisce che le credenziali amministrative abbiano solo le autorizzazioni strettamente necessarie per eseguire audit e assegnazioni delle licenze.
Checklist di configurazione dell'ambiente
- Aprite Windows PowerShell come amministratore.
- Impostate la PowerShell Gallery come repository attendibile:
Set-PSRepository -Name 'PSGallery' -InstallationPolicy Trusted - Installate il provider NuGet richiesto, se viene chiesto.
- Configurate i criteri di esecuzione degli script:
Set-ExecutionPolicy RemoteSigned
Installazione dei moduli essenziali di PowerShell per Microsoft 365
Per gestire in modo efficace utenti e licenze, è necessario installare localmente gli strumenti giusti. L'ecosistema Microsoft si è orientato con decisione verso SDK unificati, ma alcuni moduli di base restano fondamentali per le attività amministrative quotidiane.
Panoramica dei moduli
- Microsoft.Graph: il modulo unificato moderno che sostituisce strumenti legacy come MSOnline e AzureAD.
- ExchangeOnlineManagement: essenziale per la governance delle caselle di posta, la conversione delle caselle condivise e il monitoraggio del flusso di posta.
- MicrosoftTeams: essenziale per la gestione dei carichi di lavoro di collaborazione e dei criteri per le riunioni.
Passaggi di installazione
Per installare i moduli moderni principali, eseguite i seguenti comandi in un prompt di PowerShell con privilegi elevati:
Install-Module -Name Microsoft.Graph -Scope CurrentUser -Force
Install-Module -Name ExchangeOnlineManagement -Scope CurrentUser -Force
Install-Module -Name MicrosoftTeams -Scope CurrentUser -ForceVerificate sempre le installazioni con Get-InstalledModule per assicurarvi che versioni in conflitto non interferiscano con i vostri runbook di automazione.
Connessione di PowerShell al tenant di Microsoft 365
Stabilire una connessione sicura e affidabile con il tenant è il passaggio successivo fondamentale. Gli standard di autenticazione moderni richiedono approcci robusti, soprattutto quando si eseguono script non presidiati o pianificati.
Opzioni di autenticazione
Le autenticazioni interattive vanno bene per attività amministrative rapide e occasionali, ma gli script automatizzati in background richiedono alternative sicure. Usare l'autenticazione basata su certificato o le identità gestite ti permette di connetterti in modo sicuro senza inserire password in chiaro nei file di script.
Connessione a Graph e ai servizi
Per connetterti al backend di Microsoft Graph per la gestione di utenti e licenze, usa:
Connect-MgGraph -Scopes "User.ReadWrite.All", "Organization.Read.All"Per i carichi di lavoro specifici di Exchange e le configurazioni delle cassette postali, avvia la sessione con:
Connect-ExchangeOnlineAl termine delle operazioni in batch dello script, ricordati di chiudere la sessione eseguendo Disconnect-ExchangeOnline oppure Disconnect-MgGraph.
Verifica dei posti licenza inutilizzati e dell'inventario delle licenze
L'ottimizzazione delle licenze inizia dalla visibilità. Non puoi recuperare i posti licenza se non sai chi li utilizza e chi li ha abbandonati. Con PowerShell puoi estrarre report di inventario completi che riportano gli SKU assegnati e i timestamp dell'ultimo accesso.
Controllo degli SKU sottoscritti
Per verificare il totale delle licenze acquistate nel tuo tenant rispetto al numero di licenze disponibili, esegui il comando seguente:
Get-MgSubscribedSku | Select-Object SkuId, SkuPartNumber, @{Name="Total";Expression={$_.ConsolidatedStatus}}, @{Name="Assigned";Expression={$_.AssignedUnits}}Ricerca degli utenti inattivi
Individuare gli account che non si autenticano da oltre 90 giorni è il modo più rapido per ridurre le spese cloud non necessarie. Puoi filtrare l'elenco degli utenti per trovare gli account inattivi:
$Threshold = (Get-Date).AddDays(-90)
Get-MgGet-MgUser -All -Property Id, DisplayName, UserPrincipalName, SignInActivity | Where-Object { $_.SignInActivity.LastSignInDateTime -lt $Threshold }Esportare questi dati in un file CSV ti permette di presentare alla direzione IT metriche chiare sul risparmio prima di procedere alla rimozione massiva delle licenze.
Usare Set-MgUserLicense per assegnare e revocare le licenze
Una volta individuati i posti sottoutilizzati o i nuovi assunti da inserire, il cmdlet Set-MgUserLicense diventa il principale strumento per le modifiche.
Assegnazione programmatica delle licenze
Per assegnare un765 SKU specifico a un nuovo utente, crei un oggetto di assegnazione licenza che contiene lo SkuId di destinazione:
$Params = @{
AddLicenses = @(
@{
SkuId = "your-sku-guid-here"
}
)
RemoveLicenses = @()
}
Set-MgUserLicense -UserId "alex.johnson@contoso.com" -BodyParameter $ParamsRevoca delle licenze inutilizzate
Quando recuperi le licenze da account inattivi o da personale uscito dall'organizzazione, inverti l'operazione passando l'identificatore SKU nel parametro array RemoveLicenses, così l'organizzazione smette subito di pagare capacità cloud non utilizzata.
Automatizzare i flussi di lavoro di licenza per onboarding e offboarding
La creazione e la disattivazione manuale degli utenti introducono ritardi significativi e rischi per la sicurezza. Automatizzando i flussi di onboarding e offboarding, fai in modo che le licenze vengano assegnate nel momento in cui un dipendente entra e revocate immediatamente il giorno in cui lascia l'azienda.
Uno script di offboarding automatizzato può disabilitare l'account utente, rimuovere le licenze assegnate, convertire la sua cassetta postale in una risorsa condivisa ed esportare le tracce di audit in una posizione di archiviazione sicura, il tutto in un unico blocco di esecuzione continuo. Questo livello di sincronizzazione elimina gli sprechi di licenze e preserva la postura di sicurezza dell'organizzazione.
Best practice di sicurezza e privilegio minimo
L'automazione concede un potere enorme, quindi va governata con rigore. Seguire principi di sicurezza severi protegge il tuo tenant da configurazioni errate accidentali ed esecuzioni di script malevole.
- Accesso con privilegio minimo: non concedere mai i diritti di Amministratore globale agli account di servizio automatizzati. Limita le autorizzazioni a ciò che lo script richiede effettivamente.
- Sicurezza delle credenziali: non memorizzare mai password in chiaro all'interno degli script. Usa Azure Key Vault, identità gestite o l'autenticazione tramite certificato.
- Registrazione completa: implementa blocchi try/catch robusti e registra i passaggi di esecuzione dello script in log locali o nel cloud per garantire la piena tracciabilità.
Risoluzione dei problemi comuni di licenze e connessione
Anche gli amministratori più esperti incontrano talvolta ostacoli durante l'esecuzione degli script di automazione di Microsoft 365. Capire come gestire questi errori ti farà risparmiare ore di frustrazione.
- Errori di autorizzazione negata: verifica che l'account che esegue lo script disponga dei ruoli di directory di Azure AD richiesti e che la connessione a Graph abbia richiesto gli ambiti di consenso corretti.
- Errori di assegnazione delle licenze: assicurati che all'utente di destinazione sia configurato un "Paese di utilizzo". Microsoft 365 rifiuterà le assegnazioni di licenza se il campo del paese dell'utente è vuoto.
- Conflitti tra moduli: se i cmdlet non funzionano a causa di versioni di moduli in conflitto, disinstalla completamente i moduli obsoleti (come MSOnline) e standardizza l'ambiente sull'SDK moderno di Microsoft Graph.
Conclusione
Automatizzare l'ottimizzazione delle licenze e gli audit in Microsoft 365 colma il divario tra un'amministrazione IT efficiente e una gestione finanziaria intelligente. Usando PowerShell e cmdlet come Set-MgUserLicense, puoi eliminare la spesa sprecata in software, applicare rigorosi criteri di conformità della sicurezza e semplificare i flussi di lavoro di amministrazione degli utenti in tutta l'organizzazione. Se vuoi ampliare ulteriormente le tue competenze tecniche verso strumenti e gestione dell'infrastruttura moderni, non perdere il nostro episodio correlato su come eseguire l'intero stack in locale con .NET Aspire. Resta proattivo, mantieni sicuri i tuoi script e trasforma il tuo tenant di Microsoft 365 in un motore ben oliato e ottimizzato nei costi!