Non è cosa che dovrebbe accadere così spesso, ma può succedere che ti serva eliminare una casella di posta “di troppo” senza però perderne il contenuto, da spostare su una diversa casella di posta che continuerà invece a funzionare. Fare l’operazione in maniera “manuale” spostando tutto tramite Outlook può essere davvero oneroso (in termini di tempo) e papabilmente disastroso (perché ci si può distrarre facilmente, non spostare del materiale e cancellare la casella troppo presto), meglio passare da qualcosa di più automatizzato e che possa facilmente sostituirti, PowerShell torna utile ancora una volta.
Merge delle caselle di posta su Exchange Online
Ti lascio un paio di riferimenti per iniziare a introdurre l’argomento:
- neroblanco.co.uk/2018/10/merging-two-office-365-mailboxes
- techcommunity.microsoft.com/t5/Office-365/How-to-Merge-Exchange-Online-mailbox/m-p/394738
Si parla di metodi manuali e di automatizzazione delle operazioni, che poi è la strada che ho scelto di percorrere.
Utilizza PowerShell
Stavolta non è merito mio, lo script esiste già e funziona correttamente, scritto e pubblicato da David Barrett (Microsoft) sul repository del colosso di Redmond: gallery.technet.microsoft.com/exchange/Merge-mailbox-folders-cf1e9576. Avrai bisogno di EWS e delle sue API (da installare localmente sul tuo PC: microsoft.com/en-us/download/details.aspx?id=35371), al resto penserà lo script, compresa l’attesa forzata quando le operazioni di spostamento dei contenuti da una casella di posta all’altra inizieranno a diventare numerose.
Del codice e del funzionamento dello script se ne parla in maniera abbastanza approfondita qui: code.msdn.microsoft.com/office/PowerShell-Merge-mailbox-e769c529. I parametri di base da conoscere sono – grosso modo – questi:
-SourceMailbox |
Serve a specificare la casella sorgente dalla quale copiare i dati. |
-TargetMailbox |
Serve a specificare la casella di destinazione verso la quale copiare / spostare i dati. |
-SourcePublicFolders |
Serve a specificare se copiare (dalla sorgente) le cartelle pubbliche. |
-TargetPublicFolders |
Serve a specificare se copiare (sulla destinazione) le cartelle pubbliche. |
-ProcessSubFolders |
Se utilizzato, lo script cercherà le email in tutte le cartelle e sottocartelle. |
-CreateTargetFolder |
Se utilizzato, lo script ricreerà la struttura cartelle nella casella di destinazione (vale per le cartelle non esistenti). |
-Delete |
Se utilizzato, lo script tenterà di cancellare le cartelle rimaste vuote nella casella di posta sorgente. |
-Copy |
Se utilizzato, lo script copierà le email lasciando le originali nella casella di posta sorgente. |
-Credential |
Il parametro accetta PSCredentials per l’autenticazione su Exchange (dovrai prima lanciare un Get-Credential). Il parametro non potrà essere utilizzato se hai l’autenticazione a due fattori attiva sul tuo account. |
-OAuth |
Utilizza questo parametro per autenticarti con la Modern Authentication di Microsoft (necessaria se il tuo account è protetto da 2-Step Auth.). |
-EwsUrl |
L’indirizzo dell’endpoint EWS. Se non specificato verrà cercato tramite autodiscover. Posso dirti che per Office 365 vale direttamente https://outlook.office365.com/EWS/Exchange.asmx |
Di parametri in realtà ne esistono molti di più, ma per il mio specifico caso non ho avuto bisogno di null’altro, forse varrà la stessa cosa anche per te. In pratica ho potuto lanciare uno spostamento completo del contenuto di una casella all’altra in questa maniera:
Merge-MailboxFolder.ps1 -SourceMailbox sharedmailbox@contoso.onmicrosoft.com -TargetMailbox usermailbox@contoso.com -ProcessSubfolders -CreateTargetFolder -Delete -EwsUrl "https://outlook.office365.com/EWS/Exchange.asmx" -OAuth
Tutto il contenuto della Shared Mailbox confluirà all’interno della casella di posta dell’utente, finendo nelle medesime cartelle (quelle non esistenti verranno create) e non lasciando traccia sulla sorgente, dalla stessa verranno poi cancellate le cartelle vuote. Utilizzo l’autenticazione moderna di Microsoft per riuscire a passare indenne il check della 2-Step Auth., dando un OK sul mio dispositivo di conferma autenticazione. A questo punto lo script comincerà ad analizzare la casella sorgente e copierà / sposterà i dati verso la destinazione stabilita.
Non preoccuparti se di tanto in tanto vedi stuole di errori a video, le email stanno comunque muovendosi da un lato all’altro rispettando tempi e limiti del collegamento PowerShell con EWS, puoi nel frattempo svolgere un differente lavoro e tornare a controllare di tanto in tanto il merge.
Aggiungo che – sporadicamente – può capitare che delle cartelle in profondità (sottocartelle di ulteriori sottocartelle, per dire) non vengano immediatamente viste e fatte muovere, per questo motivo ti consiglio di:
- tenere sempre aperta una finestra del browser puntandola all’interfaccia WebMail della casella sorgente (apri anche quella di destinazione, giusto per sicurezza).
- Far girare più volte lo script fino a quando questo terminerà senza aver più trovato nulla.
Non dovrei aver dimenticato nulla. Nel caso in cui ci siano dubbi o tu avessi necessità di ulteriori informazioni non esitare a lasciare un commento.
Buon lavoro!
L'articolo potrebbe non essere aggiornato
Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)