Negli articolo relativi a Windows Server 2019 abbiamo visto come i Criteri di gruppo (GPO) sono utili per applicare restrizioni/impostazioni su un numero elevato di utenti e dispositivi all'interno di un dominio. Con il passare del tempo e della complessità del dominio, ci si può ritrovare con centinaia o addirittura migliaia di Criteri di gruppo da gestire e questo può rappresentare un problema soprattutto se si vuole mantenere in ordine Active Directory ed evitare l'accumularsi di GPO che non vengono più utilizzate. Anche tramite l'utilizzo di Gestione Criteri di gruppo, individuare i criteri di gruppo non più utilizzati e non dotati di alcun collegamento abilitato non è un operazione semplice. In questi casi ci viene in aiuto PowerShell. Tramite il seguente script PowerShell otteniamo l'elenco dei Criteri di gruppo non collegati:
$criteri = Get-Gpo -All
foreach ($gpo in $criteri) {
[xml]$report = Get-GPOReport -Guid $gpo.ID -ReportType xml
if (-not $report.GPO.LinksTo) {
$gpo.DisplayName
}
}
La prima operazione che effettua lo script è quella di raccogliere tutti i criteri di gruppo attraverso l'utilizzo del cmdlet Get-GPO con il parametro -All e assegnarli alla varibile $criteri. A questo punto è possibile analizzare ciascun criterio di gruppo contenuto in $criteri tramite il ciclo foreach. Gli oggetti forniti in output dal cmdlet Get-GPO non dispongono di alcuna proprietà che ci consenta di determinare se il criterio di gruppo è collegato o meno pertanto, all'interno del ciclo foreach, siamo costretti ad utilizzare allo scopo il cmdlet Get-GPOReport. Al cmdlet, tramite il parametro -Guid, viene passato l'ID del criterio di gruppo che si sta verificando. Il parametro -ReportType, invece, ci consente di specificare il formato del report. Il formato XML ci agevolerà nel recupero delle proprietà dalla variabile $report. Nell'istruzione IF successiva verifichiamo se la proprietà GPO.LinksTo è nulla; in questo caso il criterio di gruppo che stiamo analizzando non dispone di alcun collegamento abilitato quindi visualizziamo in output il suo nome (DisplayName).
Dal seguente link è possibile scaricare il file PS1 contenente lo script PowerShell