Le cassette postali condivise di Microsoft 365 sono preziose per la collaborazione tra team, ma quelle trascurate diventano uno spreco silenzioso di risorse e un rischio per la sicurezza. Automatizzare la procedura per ottenere report sulle cassette postali inattive è fondamentale per mantenere un ambiente sicuro, conforme ed efficiente in termini di costi.
In questa guida imparerai a individuare questi account dormienti, generare report di audit chiari e applicare azioni correttive con PowerShell su tutti i tenant dei tuoi clienti.
Come individuare e gestire le cassette postali inattive con PowerShell
Mantenere i tenant Microsoft 365 liberi da cassette postali condivise inutilizzate rafforza la sicurezza, migliora le prestazioni e semplifica gli audit.
📌 Situazione d’uso: esegui questa pulizia durante la manutenzione ordinaria, l’onboarding o l’offboarding dei clienti oppure nelle revisioni trimestrali (QBR), per garantire la conformità e un uso efficiente delle risorse.
📌 Prerequisiti: prima di procedere, verifica di avere:
- un ruolo di amministratore globale di Microsoft 365 o di amministratore di Exchange;
- il modulo PowerShell di Exchange Online installato;
- PowerShell 5.1 o versioni successive;
- (facoltativo) uno strumento RMM come NinjaOne per eseguire script su larga scala su più tenant;
- (facoltativo) l’uso di tag nel Registro di sistema per il tracciamento negli ambienti ibridi.
Ti consigliamo di leggere ⚠️ Aspetti a cui prestare attenzione prima di procedere.
Passaggio 1: connettiti a Exchange Online con PowerShell
Per gestire le cassette postali sui tenant dei clienti, serve innanzitutto una connessione sicura a Microsoft 365.
- Apri PowerShell (amministratore) o Windows Terminal (amministratore).
- Installa il modulo necessario.
- Esegui il comando seguente per installare il modulo ExchangeOnlineManagement. Conferma le eventuali richieste che compaiono:
Install-Module -Name ExchangeOnlineManagement -Force -AllowClobber
- Stabilisci la connessione.
- Esegui il comando qui sotto, sostituendo [email protected] con il tuo account amministratore. Si aprirà una finestra di autenticazione moderna in cui accedere.
Connect-ExchangeOnline -UserPrincipalName [email protected]
Una volta stabilita la connessione, puoi elencare, controllare e gestire le cassette postali di tutti i tuoi tenant seguendo i passaggi qui sotto.
Passaggio 2: individua tutte le cassette postali condivise e la data dell’ultimo accesso
Per trovare le cassette postali inattive, devi prima raccogliere l’elenco di tutte le cassette postali condivise e verificare la data dell’ultimo accesso.
Dopo esserti connesso a Exchange Online, esegui i comandi PowerShell seguenti.
- Ottieni tutte le cassette postali condivise del tenant:
$sharedMailboxes = Get-Mailbox -RecipientTypeDetails SharedMailbox -ResultSize Unlimited
- Verifica l’ora dell’ultimo accesso per ciascuna cassetta postale:
$sharedMailboxes = Get-Mailbox -RecipientTypeDetails SharedMailbox -ResultSize Unlimited$mailboxReport = foreach ($mb in $sharedMailboxes) {$auditLog = Search-UnifiedAuditLog -StartDate (Get-Date).AddDays(-90) -EndDate (Get-Date) -Operations "MailItemsAccessed" -UserIds $mb.PrimarySmtpAddress[PSCustomObject]@{DisplayName = $mb.DisplayNamePrimarySMTP = $mb.PrimarySmtpAddressLastActivity = if ($auditLog) { ($auditLog | Sort-Object CreationDate -Descending | Select-Object -First 1).CreationDate } else { "No Activity Found" }}}$mailboxReport | Format-Table -AutoSize
Al termine otterrai un report chiaro che mostra quali cassette postali condivise sono attive e quali sono dormienti. Questo report è la base per le azioni successive: disattivare la cassetta postale oppure convertirla in uno stato inattivo per esigenze di conformità.
Passaggio 3: filtra ed esporta le cassette postali dormienti
Ora che hai raccolto i segnali di attività, puoi iniziare a individuare quali cassette postali potrebbero essere inattive oltre la soglia che hai definito.
Partendo dall’elenco di cassette postali raccolto nel passaggio 2, lo script PowerShell seguente le filtra in base all’indicatore di attività scelto e a una soglia definita (ad esempio 90 giorni), quindi esporta i risultati in un file CSV da esaminare.
- Definisci la soglia di inattività (ad esempio 90 giorni):
$cutoffDate = (Get-Date).AddDays(-90)
- Filtra l’elenco delle cassette postali condivise per trovare quelle dormienti:
$cutoffDate = (Get-Date).AddDays(-90)
$dormantMailboxes = foreach ($mb in $sharedMailboxes) {$auditLog = Search-UnifiedAuditLog -StartDate $cutoffDate -EndDate (Get-Date) -Operations "MailItemsAccessed" -UserIds $mb.PrimarySmtpAddressif (-not $auditLog) {[PSCustomObject]@{DisplayName = $mb.DisplayNamePrimarySMTP = $mb.PrimarySmtpAddressLastActivity = "No Activity Found"}}}
- Esporta i risultati in un file CSV:
$dormantMailboxes | Export-Csv -Path "C:\Reports\InactiveSharedMailboxes.csv" -NoTypeInformation
Dopo aver eseguito questo script avrai un file CSV con l’elenco delle cassette postali condivise per cui non è stata rilevata attività in base al segnale di audit scelto. Puoi usare questo report come elenco di verifica per azioni successive come la revisione degli accessi, la valutazione dell’archiviazione o altre decisioni sul ciclo di vita, a seconda dei requisiti della tua organizzazione.
Passaggio 4: gestisci le cassette postali condivise senza attività rilevata
Dopo aver individuato nel passaggio precedente le cassette postali condivise senza segnali di attività recente, esaminale e verificale prima di intervenire. In base ai requisiti di conformità e di ciclo di vita della tua organizzazione, scegli l’azione di gestione più adatta per ciascuna cassetta postale inclusa nel report.
- Opzione 1: blocca l’accesso dell’account associato.
- Questa azione blocca l’accesso interattivo dell’account associato e aiuta a ridurre i possibili percorsi di accesso non autorizzato, mantenendo intatti i dati e la configurazione della cassetta postale:
Set-Mailbox -Identity "SharedMailboxName" -AccountDisabled $true
- Opzione 2: rimuovi le autorizzazioni delegate (consigliato prima della disattivazione)
- Rimuovi le autorizzazioni di accesso completo per un utente specifico:
Remove-MailboxPermission -Identity "SharedMailboxName" -User [email protected] -AccessRights FullAccess -Confirm:$false
- Rimuovi le autorizzazioni Invia come per un utente specifico:
Remove-RecipientPermission -Identity "SharedMailboxName" -Trustee [email protected] -AccessRights SendAs -Confirm:$false
- Opzione 3: converti in una cassetta postale utente standard (a scopo di archiviazione)
- Esegui questo script:
Set-Mailbox -Identity "SharedMailboxName" -Type Regular
- Opzione 4: applica un tag per il monitoraggio della conservazione
- Usa un attributo personalizzato per etichettare le cassette postali ai fini dell’identificazione, del reporting o di azioni successive nei tuoi processi di gestione:
Set-Mailbox -Identity "SharedMailboxName" -CustomAttribute1 "Inactive_90Days"
Al termine di questa procedura, per le cassette postali interessate è possibile rimuovere gli accessi delegati, convertirle in un altro tipo di cassetta postale oppure etichettarle per il monitoraggio interno, in base alle tue esigenze di gestione. Queste azioni migliorano la visibilità amministrativa e supportano le attività di gestione successive.
Le modifiche hanno effetto immediato; è comunque consigliabile verificare i risultati esaminando le proprietà e le autorizzazioni di ogni cassetta postale elaborata (ad esempio con Get-Mailbox, Get-MailboxPermission o Get-RecipientPermission).
Passaggio facoltativo: salva i metadati nel Registro di sistema o in un file di log
Negli ambienti ibridi o per il tracciamento locale, puoi registrare i risultati dell’audit direttamente nel Registro di sistema di Windows.
Questo passaggio facoltativo crea una traccia permanente della scansione sulla tua macchina di gestione, utile per monitorare le tendenze o per l’integrazione con i sistemi on-premise:
- Crea il percorso della chiave di registro (esegui come amministratore):
New-Item -Path "HKLM:\SOFTWARE\YourOrg\MailboxAudit" -Force
- Registra la data e ora e il numero di cassette postali dormienti:
Set-ItemProperty -Path "HKLM:\SOFTWARE\YourOrg\MailboxAudit" -Name "LastDormantScan" -Value (Get-Date).ToString("u")Set-ItemProperty -Path "HKLM:\SOFTWARE\YourOrg\MailboxAudit" -Name "DormantMailboxesCount" -Value $dormantMailboxes.Count
- Verifica dal Prompt dei comandi (amministratore):
reg query HKLM\SOFTWARE\YourOrg\MailboxAudit
Dopo l’implementazione, il sistema conserverà uno storico verificabile delle attività di audit delle cassette postali, consultabile per i report di conformità o integrabile con gli strumenti di monitoraggio. Le voci di registro restano finché non vengono modificate o rimosse manualmente, offrendo una traccia a lungo termine del lavoro di pulizia dei tenant.
⚠️ Aspetti a cui prestare attenzione
Questa sezione evidenzia le possibili difficoltà da tenere presenti mentre segui questa guida.
| Rischi | Possibili conseguenze | Come rimediare |
| 1. Inattività individuata in modo errato ($null LastLogonTime) | Una cassetta postale senza data di accesso ($null) può essere una cassetta nuova mai utilizzata oppure una a cui si accede solo tramite protocolli che non aggiornano questa statistica. Scambiarla per dormiente potrebbe interrompere il funzionamento di una cassetta postale attiva e critica. | Prima di intervenire, incrocia i dati con altre fonti come i log del flusso di posta (MessageTrace) o il log di controllo unificato per gli eventi MailItemsAccessed. |
| 2. Autorizzazioni di amministratore insufficienti | Eseguire Get-MailboxStatistics o Set-Mailbox senza il ruolo di amministratore di Exchange genera errori, interruzioni dello script e un report incompleto. | Prima di eseguire i comandi PowerShell, verifica che al tuo account siano assegnati i ruoli adeguati (ad esempio amministratore di Exchange) e che disponga di autorizzazioni sufficienti in Exchange Online (RBAC). |
| 3. Perdita accidentale di dati o interruzione del servizio | Disattivare una cassetta postale ancora in uso o convertire una cassetta postale condivisa in una cassetta postale utente standard blocca immediatamente l’accesso del team e interrompe le attività di business. | Ripristina subito l’accesso annullando il comando:
Oppure riconvertila:
|
| 4. Timeout degli script nei tenant di grandi dimensioni | L’esecuzione di query statistiche su migliaia di cassette postali può attivare le policy di limitazione (throttling) di Exchange Online, causando l’interruzione dello script o la restituzione di dati incompleti. | Usa il paging con il parametro -ResultSize Unlimited e inserisci delle pause (Start–Sleep -Seconds 2) tra un blocco di richieste e l’altro per evitare la limitazione. |
| 5. Danneggiamento del Registro di sistema (passaggio facoltativo) | Modificare il Registro di sistema di Windows senza un backup può danneggiare la configurazione del sistema e provocare errori nelle applicazioni o instabilità. | Esporta sempre un backup della chiave di registro prima di apportare modifiche:
Se si verifica un errore, importa il backup per ripristinare lo stato precedente. |
| 6. Falsi positivi nei report di audit | Affidarsi unicamente a LastLogonTime potrebbe escludere cassette postali usate per inviare avvisi automatici o che ricevono solo email occasionali ma importanti, con il rischio di una classificazione errata. | Adotta un processo di revisione su più fattori. Prima di chiudere l’elenco delle cassette postali dormienti, controlla gli elementi inviati di recente, le regole della posta in arrivo e gli indirizzi di inoltro. |
Aspetti chiave per una gestione sicura delle cassette postali condivise
Gestire con successo le cassette postali inattive richiede una pianificazione attenta, che va oltre la semplice esecuzione degli script.
Attiva la registrazione di audit delle cassette postali
Prima di intervenire, verifica che la registrazione di audit sia attiva per le tue cassette postali condivise.
In questo modo ottieni registrazioni dettagliate su chi ha avuto accesso alla cassetta postale e quando, creando una traccia essenziale per le verifiche future sull’effettiva attività di una cassetta postale condivisa e per gli audit di conformità. Questi dati storici sono preziosi se in seguito devi verificare i modelli di utilizzo.
Allinea tutto ai criteri di conservazione e ai blocchi per controversia legale
Incrocia sempre l’elenco delle cassette postali dormienti con i criteri di conservazione di Microsoft 365 e i blocchi per controversia legale della tua organizzazione.
Una cassetta postale soggetta a blocco per controversia legale o a un criterio di conservazione attivo non può essere eliminata definitivamente e deve essere conservata integralmente. Disattivare l’accesso è accettabile, ma i dati devono essere conservati in base ai tuoi requisiti di conformità.
Verifica le licenze delle cassette postali condivise
Sebbene le cassette postali condivise sotto i 50 GB di norma non richiedano una licenza, verificalo prima della conversione o dell’eliminazione. Alcune applicazioni integrate o configurazioni storiche potrebbero aver assegnato una licenza.
Inoltre, esamina eventuali configurazioni di sicurezza o di servizio applicate alle cassette postali condivise, perché alcune caratteristiche o integrazioni possono comportare considerazioni sulle licenze a seconda di come viene utilizzata la cassetta postale.
Esegui script in sicurezza su più tenant
Quando automatizzi questo processo sui tenant dei clienti, non memorizzare mai le credenziali di amministratore in chiaro all’interno degli script. Usa metodi sicuri come Azure Key Vault o l’autenticazione basata su certificati (registrazioni di app) per abilitare un accesso controllato e non interattivo.
Queste pratiche riducono il rischio di esposizione delle credenziali e supportano un’automazione sicura e scalabile in tutti gli ambienti.
Come gli strumenti di automazione come NinjaOne supportano il processo
Una piattaforma RMM può automatizzare l’esecuzione delle attività di gestione delle cassette postali, rendendo più coerenti i flussi di lavoro degli MSP.
| Caratteristica | Come ti aiuta |
| Distribuzione centralizzata degli script | Esegui gli script PowerShell necessari per ottenere i dati sulle cassette postali inattive di tutti i clienti da un’unica dashboard, senza dover aprire manualmente una connessione per ogni tenant. |
| Audit e reporting automatizzati | Usa la piattaforma RMM per raccogliere l’output degli script e generare report sugli endpoint gestiti, utilizzabili per esaminare i dati di attività delle cassette postali. |
| Avvisi proattivi | Configura dei trigger per creare ticket o avvisi quando le cassette postali dormienti superano una soglia stabilita, così da intervenire in modo proattivo prima di un audit. |
| Integrazione nei flussi di lavoro | Inserisci questi controlli automatizzati nelle procedure standard di onboarding dei clienti (QBR), per garantire una pulizia dei tenant coerente e fatturabile. |
Individuare le cassette postali inattive per migliorare la visibilità operativa
Saper ottenere report sulle cassette postali inattive è essenziale per eliminare i rischi di sicurezza e ridurre il disordine amministrativo nei tuoi tenant Microsoft 365. Questa guida ti ha mostrato un percorso chiaro per individuare gli account dormienti con PowerShell, disattivarli o etichettarli per la conformità ed esportare i report da condividere con i clienti.
Automatizzando questo processo puoi trasformare un’attività manuale noiosa in una strategia proattiva e scalabile, che migliora la pulizia dei tenant e la sicurezza sull’intero parco clienti.
