===============================================================================
 Fix-OfficeTPM.ps1 - Istruzioni d'uso
===============================================================================

A COSA SERVE
------------
Risolve l'errore di Microsoft 365 / Office:
  "Il modulo TPM (Trusted Platform Module) del computer non ha funzionato
   correttamente"

Automatizza la procedura manuale di pulizia dell'identita' Office/AAD
dell'utente. Lo script NON cancella nulla: rinomina tutto con il suffisso
"-old", quindi ogni modifica si puo' annullare.


COSA FA
-------
Sul profilo dell'utente indicato:

 1. Registro (HKCU dell'utente, caricato da NTUSER.DAT):
      Software\Microsoft\Office\16.0\Common\Identity\Identities
      -> Identities-old

 2. Cartella:
      %LOCALAPPDATA%\Packages\Microsoft.AAD.BrokerPlugin_cw5n1h2txyewy
      -> Microsoft.AAD.BrokerPlugin_cw5n1h2txyewy-old

 3. In %APPDATA%\Microsoft\SystemCertificates\My:
      CRLs, CTLs, Keys, AppContainerUserCertRead  -> *-old

 4. In %APPDATA%\Microsoft\SystemCertificates\Request (se esiste):
      CRLs, CTLs  -> *-old

Se esiste gia' un elemento "-old" (es. seconda esecuzione), viene aggiunto
un timestamp: nome-old-AAAAMMGG-HHMMSS. Nulla viene sovrascritto.


REQUISITI
---------
 - Windows 10/11 con Microsoft 365 / Office 2016+ (ramo 16.0)
 - PowerShell 5.1 (quello integrato in Windows va bene)
 - Un account AMMINISTRATORE DIVERSO da quello da riparare
 - L'utente da riparare deve essere DISCONNESSO
   (Disconnetti, non "Cambia utente"; chiudere anche eventuali sessioni RDP)


PROCEDURA
---------
 1. Copiare Fix-OfficeTPM.ps1 in una cartella accessibile a tutti,
    es. C:\Temp

 2. Disconnettere l'utente da riparare.

 3. Accedere con un altro account amministratore.
    Se non esiste, crearne uno temporaneo (da un prompt amministrativo):
      net user tmpadmin * /add
      net localgroup Administrators tmpadmin /add
    (su Windows in italiano il gruppo puo' chiamarsi "Administrators"
     oppure "Amministratori")

 4. Aprire PowerShell come amministratore (tasto destro > Esegui come
    amministratore) ed eseguire:

      Set-ExecutionPolicy -Scope Process Bypass -Force
      & "C:\Temp\Fix-OfficeTPM.ps1" -UserName NOMEUTENTE -WhatIf

    -WhatIf = prova a secco: mostra cosa verrebbe fatto senza modificare
    nulla.

 5. Se l'output e' corretto, eseguire davvero:

      & "C:\Temp\Fix-OfficeTPM.ps1" -UserName NOMEUTENTE

    oppure, con riavvio automatico al termine:

      & "C:\Temp\Fix-OfficeTPM.ps1" -UserName NOMEUTENTE -Restart

 6. Riavviare (se non si e' usato -Restart), accedere con l'utente
    riparato, aprire Outlook/Word e rifare l'accesso all'account
    Microsoft 365 quando richiesto.

 7. Se era stato creato, eliminare l'account temporaneo:
      net user tmpadmin /delete


PARAMETRI
---------
 -UserName   (obbligatorio) Utente da riparare. Formati accettati:
               mario.rossi
               DOMINIO\mario.rossi
               AzureAD\NomeUtente
               nome della cartella in C:\Users
 -WhatIf     Prova a secco, nessuna modifica.
 -Restart    Riavvia il PC al termine.


LOG
---
Ogni esecuzione crea un log in:
  C:\ProgramData\Fix-OfficeTPM_AAAAMMGG-HHMMSS.log


MESSAGGI DI ERRORE COMUNI
-------------------------
 "Eseguire PowerShell come amministratore."
    -> Aprire PowerShell con "Esegui come amministratore".

 "Non eseguire lo script con lo stesso account da riparare"
    -> Si e' collegati con l'utente da riparare: usare un altro admin.

 "L'utente risulta connesso (profilo caricato)"
    -> Disconnettere l'utente (anche da Gestione attivita' > Utenti)
       oppure riavviare il PC e accedere direttamente con l'altro admin.

 "Profilo per '...' non trovato"
    -> Controllare il nome utente (vedi i nomi delle cartelle in C:\Users).

 "Piu' profili corrispondono"
    -> Indicare DOMINIO\utente o il nome esatto della cartella profilo.

 Doppio clic / lancio da cmd apre il Blocco note
    -> Lo script va lanciato da PowerShell, oppure da cmd con:
       powershell -NoProfile -ExecutionPolicy Bypass -File "C:\Temp\Fix-OfficeTPM.ps1" -UserName NOMEUTENTE

 "Termine '.\Fix-OfficeTPM.ps1' non riconosciuto"
    -> Non si e' nella cartella dello script: usare il percorso completo.

 Script bloccato perche' scaricato da Internet
    -> Unblock-File "C:\Temp\Fix-OfficeTPM.ps1"


ROLLBACK
--------
Per annullare, con l'utente disconnesso e da un altro admin:
 - eliminare (o rinominare) gli elementi ricreati da Windows/Office e
   togliere il suffisso "-old" dagli originali;
 - per il registro: caricare NTUSER.DAT dell'utente con regedit
   (File > Carica hive) sotto HKEY_USERS e rinominare "Identities-old"
   in "Identities", poi scaricare l'hive.

Dopo che il problema e' risolto e verificato, gli elementi "-old" si
possono eliminare.
===============================================================================
