============================================================
 Migrazione tenant-to-tenant / Pre-flight — 10 script PowerShell
 SynSphere Italia · https://synsphere.it
============================================================

COSA C'E' DENTRO
  10 script PowerShell (codice originale SynSphere) per fotografare un tenant Microsoft 365
  PRIMA di una migrazione tenant-to-tenant. Tutti di SOLA LETTURA.

  01-Get-T2TDomains.ps1              Domini custom, stato di verifica, record DNS pubblicati
  02-Get-T2TMailboxInventory.ps1     Cassette con ExchangeGuid, ArchiveGuid, dimensioni
  03-Get-T2TMailboxDelegations.ps1   FullAccess, SendAs, SendOnBehalf da ricostruire
  04-Get-T2TGroups.ps1               DL, security mail-enabled, gruppi M365, dinamici
  05-Get-T2TLicenseGap.ps1           Licenze per utente, usageLocation, licenze da gruppo
  06-Get-T2TSharePointSizing.ps1     Siti SharePoint e OneDrive, volume normalizzato
  07-Get-T2TTeamsInventory.ps1       Team e canali standard / privati / CONDIVISI, owner
  08-Get-T2TMailFlow.ps1             Connettori, domini accettati e remoti, regole trasporto
  09-Get-T2TEntraObjects.ps1         Utenti cloud-only vs sincronizzati, guest, gruppi
  10-Get-T2TPreflightSummary.ps1     Cruscotto: i numeri per dimensionare la migrazione

PREREQUISITI
  - PowerShell 5.1+ oppure PowerShell 7
  - Exchange Online:  Install-Module ExchangeOnlineManagement -Scope CurrentUser
  - Microsoft Graph:  Install-Module Microsoft.Graph -Scope CurrentUser
  - SharePoint (solo 06): Install-Module Microsoft.Online.SharePoint.PowerShell -Scope CurrentUser
  - Nessuna licenza aggiuntiva: girano su Microsoft 365 Business Premium.

RUOLI IN SOLA LETTURA
  Global Reader                             copre tutta la parte Microsoft Graph
  View-Only Organization Management (EXO)   copre tutta la parte Exchange
  Teams Administrator                       consigliato per lo script 07 (vedi sotto)
  SharePoint Administrator                  per lo script 06

ORDINE CONSIGLIATO
  09 -> 05 -> 02 -> 03 -> 04 -> 01 -> 08 -> 06 -> 07 -> 10
  Si parte dalle identita' perche' la distinzione cloud-only / sincronizzati decide il piano;
  si chiude col cruscotto, a cui si passa il CSV dello script 06:
      .\10-Get-T2TPreflightSummary.ps1 -SharePointCsv .\T2T-SharePoint-<data>.csv

DUE TENANT = DUE ESECUZIONI SEPARATE
  Connect-MgGraph SOSTITUISCE la sessione del processo, ed Exchange Online e SharePoint tengono
  un contesto per sessione. Per confrontare sorgente e destinazione si esegue il toolkit su un
  tenant per volta, in processi PowerShell DISTINTI, e si confrontano i CSV offline.
  Uno script che provasse a tenere i due tenant nello stesso processo riporterebbe due volte lo
  stesso tenant SENZA dare errore.

COSA QUESTO TOOLKIT NON FA, E PERCHE'
  - Non produce i record DNS da creare sul tenant di destinazione. I CNAME DKIM del target
    dipendono dal prefisso del dominio iniziale del target e dalla partizione assegnata: valori
    che esistono solo dopo aver aggiunto il dominio di la'. Un runbook DNS "gia' pronto"
    ricavato dal sorgente sarebbe sbagliato.
  - Non verifica Organization Relationship, MailboxMoveCapability o la raggiungibilita'
    dell'endpoint di migrazione. In un pre-flight quegli oggetti non esistono ancora: un
    semaforo rosso non significherebbe nulla.
  - Non sposta e non modifica niente: sono tutti Get-*.

TRE TRAPPOLE CHE ABBIAMO GIA' DISINNESCATO PER TE
  Non sono dettagli: ognuna produce un report SBAGLIATO senza mostrare un solo errore.
  - ResultSize vale 1000 su tutti i Get-* di Exchange Online, e Get-SPOSite -Limit vale 200:
    oltre quelle soglie l'elenco tronca in silenzio. Qui e' sempre forzato a Unlimited / ALL.
  - Get-MgUser restituisce solo 11 proprieta': senza -Property esplicito usageLocation esce
    vuota per tutti e si conclude che nessuno l'ha impostata. E onPremisesSyncEnabled e'
    tri-stato ($true / $null, mai $false): un filtro -eq $false non trova nessuno e un tenant
    ibrido risulta interamente cloud.
  - NT AUTHORITY\SELF ha FullAccess ASSEGNATO, non ereditato: il filtro classico
    Where-Object { -not $_.IsInherited } non lo esclude e l'elenco delle deleghe da ricostruire
    esce gonfiato del doppio.

OUTPUT
  Ogni script scrive un CSV UTF-8 nella cartella corrente, con la data nel nome. Nessuno
  sovrascrive i file degli altri.

SUPPORTO
  Gli script sono forniti "as is", senza garanzia. Verificali in un ambiente di prova prima di
  usarli su un tenant di produzione. Per un assessment di migrazione seguito da noi:
  https://synsphere.it/contattaci

============================================================
 SynSphere Italia · Partner Microsoft per le PMI italiane
 https://synsphere.it
============================================================
