============================================================
 Governance e inventario degli agenti AI in Microsoft 365
 11 script PowerShell - SynSphere Italia - https://synsphere.it
============================================================

PREMESSA IMPORTANTE - LEGGILA PRIMA DI PROMETTERE QUALCOSA A UN CLIENTE

  La domanda che arriva sempre e': "cosa vede questo agente?".
  Ad agosto 2026 quella domanda NON ha una risposta automatizzabile.

  Non esiste alcun cmdlet, in nessun modulo, che unisca l'identita' di un
  agente ai permessi effettivi che quell'agente ha su SharePoint e OneDrive.
  Si puo' inventariare l'identita' da un lato (script 01 e 02) e fotografare i
  permessi dei siti dall'altro (script 07 e 08), ma la giunzione fra le due
  cose resta un lavoro manuale di analisi.
  Questo toolkit serve a costruire i due lati con dati veri e a rendere
  esplicito che il ponte va costruito a mano. Dirlo prima e' la differenza fra
  un assessment e una promessa non mantenuta.

  Secondo punto, altrettanto scomodo: i cmdlet dedicati agli agenti ESISTONO
  (Get-EntraAgentIdentity, Get-EntraAgentUser, Get-EntraAgentIdentityBlueprint,
  nel modulo Microsoft.Entra dalla versione 1.3) ma NON permettono un
  inventario, perche' accettano soltanto un AgentId o un BlueprintId e non
  esiste alcun cmdlet che elenchi i blueprint. La catena e' rotta all'origine.
  Microsoft stessa li presenta come strumenti "for testing purposes" e indica
  Microsoft Graph come via di produzione. Per questo l'inventario di questo
  toolkit passa dal cmdlet generico Get-MgServicePrincipal filtrando
  servicePrincipalType eq 'ServiceIdentity'.

COSA C'E' DENTRO
  11 script PowerShell (codice originale SynSphere), tutti di SOLA LETTURA.
  Nessuno di essi modifica il tenant: dove un'azione correttiva e' possibile,
  il comando viene stampato a schermo perche' sia eseguito consapevolmente.

  00-Test-Prerequisiti.ps1                  Moduli, versioni e cmdlet: LANCIALO PER PRIMO
  01-Get-AgentIdentityInventory.ps1         Inventario tenant-wide delle agent identity
  02-Get-AgentIdentityPermissions.ps1       Permessi applicativi e delegati per agente
  03-Get-ConsentAccountability.ps1          Chi ha consentito cosa, e quando
  04-Test-UnifiedAuditLogEnabled.ps1        Audit attivo? (dalla connessione GIUSTA)
  05-Get-CopilotInteractionAudit.ps1        Interazioni Copilot e invocazioni agenti
  06-Get-CopilotLicenseInventory.ps1        Licenze Copilot: quante, a chi, quante libere
  07-Get-SharePointOversharingBaseline.ps1  Condivisione sito per sito (doppio passaggio)
  08-Get-RestrictedContentDiscoveryStatus.ps1  Stato RCD per sito
  09-Get-ShadowAIPowerPlatform.ps1          App, flow, connessioni: la shadow AI
  10-Get-CopilotStudioAgents.ps1            Agenti di Copilot Studio (via Resource Graph)

ORDINE CONSIGLIATO
  00 -> 01 -> 02 -> 03      identita' e permessi degli agenti
  04 -> 05                  tracciabilita' di cio' che gli agenti fanno
  06                        il conto economico
  07 -> 08                  il terreno su cui gli agenti leggono
  09 -> 10                  cosa hanno costruito le persone da sole

DUE VERSIONI DI POWERSHELL, E NON E' UNA SCELTA NOSTRA
  Gli script da 00 a 08 e il 10 vogliono PowerShell 7 (pwsh.exe).
  Lo script 09 gira SOLO su Windows PowerShell 5.x (powershell.exe), perche' il
  modulo Microsoft.PowerApps.Administration.PowerShell non e' compatibile con
  .NET Core. Non esiste un unico script che faccia tutto: se ti serve un giro
  completo, servono due sessioni.

LICENZE
  Non richiedono nulla oltre ai ruoli:
    inventario agent identity e permessi, audit Copilot e agenti, inventario
    Power Platform, lettura della condivisione SharePoint.
  Richiedono almeno una licenza Microsoft 365 Copilot nel tenant:
    Restricted Content Discovery (script 08), che arriva con SharePoint
    Advanced Management.
  Nota controcorrente: l'inventario Power Platform NON richiede E5. Se qualcuno
  ti dice il contrario, sta ripetendo una cosa non verificata.

I TRE ERRORI CHE PRODUCONO REPORT SBAGLIATI SENZA DARE ERRORE
  1. Get-AdminAuditLogConfig eseguito nel modulo Security & Compliance
     restituisce UnifiedAuditLogIngestionEnabled = False ANCHE QUANDO L'AUDIT E'
     ATTIVO. Uno script che apre la connessione sbagliata conclude che l'audit
     e' spento e produce un report falsamente rassicurante. Lo script 04 si
     connette esplicitamente a Exchange Online per questo motivo.
  2. Get-SPOSite -Limit ALL popola valori di DEFAULT sulle proprieta' di
     condivisione: filtrare quell'elenco su SharingCapability da' risultati
     falsi ma plausibili. Lo script 07 fa due passaggi proprio per evitarlo.
  3. L'endpoint delle agent identity ha page size MASSIMO 100, non solo di
     default: chi interroga Graph a mano senza seguire @odata.nextLink si ferma
     in silenzio al centesimo agente e crede di avere l'elenco completo.

OGNI NUMERO VA DATATO
  Le latenze di questa superficie sono grandi e disomogenee: l'audit log ha
  60-90 minuti, l'inventario degli agenti circa 20, le licenze Power Platform
  fino a 7 giorni, il primo report sui permessi fino a 5. Due esecuzioni
  consecutive possono dare numeri diversi senza che nulla sia rotto. Tutti gli
  script stampano la data e l'ora del rilevamento: riportale nel report, o la
  prima domanda del cliente sara' perche' i numeri sono cambiati.

VERIFICATO IL 19 agosto 2026
  Ogni cmdlet usato qui e' stato verificato sulla documentazione ufficiale
  Microsoft a quella data, con un controllo avversariale il cui compito era
  smentire l'esistenza dei cmdlet, non confermarla. Su una superficie che si
  muove ogni mese questo non basta a lungo: 00-Test-Prerequisiti.ps1 esiste per
  dirti, sul tuo tenant e sulla tua versione di modulo, cosa risponde ancora.

  Fornito "as is", senza garanzia. Uso libero, anche commerciale.

  Serve una mano a leggere i CSV o a costruire il ponte fra identita' e
  permessi? synsphere.it/ai
