Alla crescita di un’organizzazione corrisponde l’espansione del suo ambiente Active Directory (AD) e dell’infrastruttura Group Policy (GP). Gli oggetti di Group Policy (GPOs) possono presto sfuggire di mano e, prima che tu te ne accorga, avrai dozzine di GPO non collegati che ingombrano il tuo ambiente. Cambiamo questa situazione.
In questo tutorial, imparerai come individuare tutti quei GPO non collegati sia con la Group Policy Management Console (GPMC) che con PowerShell.
Cominciamo!
Prerequisiti
Questo articolo sarà un tutorial con esempi pratici. Se desideri seguirci, assicurati di avere:
- Un dominio Active Directory. Questo articolo utilizzerà un dominio chiamato HomeLab.Local.
- A Windows computer joined to the AD domain. This tutorial will use Windows 10.
- Il computer Windows deve avere installato il pacchetto Remote Server Administration Tools (RSAT).
Da dove provengono i GPO non collegati?
Quando si crea un GPO e si definiscono tutte le impostazioni che si intendono applicare ai computer client, quel GPO in realtà non sta facendo nulla. Per influenzare effettivamente i computer client, il GPO deve essere collegato a un’unità organizzativa (OU) di AD.
Col passare del tempo e con sempre più amministratori che creano GPO, dimenticano di collegarli, scollegano i GPO dalle OU, intendono rimuoverli ma non lo fanno mai, i GPO che non fanno nulla possono proliferare. Specialmente nelle grandi organizzazioni, i GPO non collegati possono crescere fino a diventare centinaia se non vengono gestiti correttamente.
Trovare i GPO non collegati nella GPMC
È possibile trovare i GPO non collegati in due modi: tramite la GPMC o tramite PowerShell. Se si dispone solo di alcuni GPO non collegati, potrebbe avere senso utilizzare la GPMC anziché creare uno script PowerShell.
Per trovare i GPO non collegati tramite la GPMC:
1. Aprire la GPMC andando nel menu Start e digitando “gestione della group policy”. Quando compare il programma GPMC, aprirlo.
2. Nella GPMC, andare a Forest: <nome della tua foresta —> Domini —> <nome del tuo dominio>, fare clic con il pulsante destro del mouse sul nome del dominio e fare clic su Cerca. Questa azione aprirà la finestra di dialogo Cerca oggetti delle Group Policy.

3. Fare clic sul menu a discesa Cerca elemento e selezionare GPO-links. Questo elemento di ricerca cercherà i GPO che sono collegati a un OU. Cambiare il menu a discesa Condizione in Esistente in e il dominio deve essere il tuo dominio.
Nella schermata sottostante, la combinazione di queste impostazioni cercherà tutti i GPO collegati a almeno un OU nel dominio homelab.local.
Quando hai completato, fare clic su Aggiungi per aggiungere il criterio. Comparirà nella sezione Tutti i criteri di ricerca.

4. Ora, fare clic sul pulsante Cerca per trovare tutti i GPO che corrispondono ai criteri di ricerca.

5. Come mostrato nella schermata sottostante, solo i GPO collegati vengono visualizzati nei risultati della ricerca.

6. Per trovare i GPO non collegati, confrontare manualmente tutti i GPO con i GPO collegati come mostrato di seguito. Nella schermata sottostante, solo tre GPO sono collegati. Guardando sotto il nodo Oggetti criteri di gruppo, è possibile vedere che due dei GPO non vengono visualizzati (UnlinkedGPO1 e UnlinkedGPO2). Ciò significa che non sono collegati.
Questa attività richiederà tempo e vedrai come eseguire questa operazione tramite PowerShell nella sezione successiva.

I GPO collegati avranno un collegamento quando sono assegnati a un oggetto AD come OU, come mostrato di seguito. Se hai solo una manciata di GPO, puoi cercare i GPO che hanno un collegamento e quelli che non ne hanno uno. I GPO che non hanno un collegamento sono i GPO non collegati.

Trovare GPO non collegati con PowerShell
Esaminando le GPO nel GPMC potrebbe funzionare per alcune GPO, ma avrai difficoltà se gestisci centinaia o migliaia di GPO che gestiscono migliaia di endpoint. In questo caso, è il momento di automatizzare questo processo e creare uno strumento PowerShell pratico.
Presumendo che tu sia sul tuo PC Windows locale con RSAT installato:
1. Apri una console di Windows PowerShell.
2. Importa il modulo GroupPolicy. Il modulo GroupPolicy viene fornito con RSAT e dovrebbe già essere installato sul tuo sistema. Questo modulo contiene tutti i comandi necessari per lavorare con le GPO in PowerShell.
3. Esegui il cmdlet PowerShell Get-GPO
utilizzando il parametro All
. Questo cmdlet interroga AD e restituisce tutte le GPO trovate.

4. Ora che puoi interrogare tutte le GPO nel dominio, devi capire quali sono scollegate. Per farlo, esegui il cmdlet Get-GPOReport
. Questo cmdlet ti consente di fornire un nome e un tipo di output da restituire.
Copia e incolla manualmente uno dei nomi delle GPO trovate nel passo precedente e esegui questo comando. Vedrai che il cmdlet restituirà un rapporto XML di tutte le impostazioni che ha la GPO. In particolare, nota la sezione chiamata LinksTo
, come mostrato di seguito. Questa sezione contiene il nodo XML SOMPath
che rappresenta il percorso all’OU a cui è collegato.

Il cmdlet
Get-GPOReport
può ottenere solo un report per un singolo GPO alla volta. Questo cmdlet include solo i risultati della ricerca dai domini e non dai siti AD.
5. Ora che sai come trovare tutti i GPO con il comando Get-GPO
e il cmdlet per scoprire a cosa sono collegati (Get-GPOReport
), combinali copiando e incollando il comando PowerShell di seguito nella tua console.
Il comando qui sotto interroga tutti i GPO nel dominio (Get-GPO
) e genera quindi un report XML per ognuno di essi (Get-GPOReport
), consentendo solo quelli che non hanno una stringa <LinksTo>
nel report (Select-String
) di essere restituiti.
Nell’ambiente del tutorial, puoi vedere nell’esempio seguente che UnlinkedGPO1 e UnlinkedGPO2 non sono collegati a nessuna OU.

Costruzione di uno Strumento PowerShell per GPO non collegati
Ora mettiamo insieme tutto ciò che hai imparato e costruiamo uno script PowerShell che potresti utilizzare nel mondo reale.
1. Apri il tuo editor di codice preferito e copia/incolla lo script PowerShell seguente. Salva lo script come Remove-UnlinkedGPO.ps1. Questo script:
- Crea una cartella con la data odierna per memorizzare i report dei GPO non collegati.
- Trova tutti i GPO in AD che non sono collegati.
- Crea un report HTML per ogni GPO non collegato e lo salva su disco.
- Crea e aggiunge a un file di testo un elenco di tutti i GPO non collegati.
- Rimuove ogni GPO non collegato con un passaggio di conferma utilizzando il cmdlet
Remove-GPO
.
Puoi anche scaricare lo script Remove-UnlinkedGPO.ps1 tramite GitHub
2. Esegui lo script Remove-UnlinkedGPO.ps1.
3. Se viene trovato un GPO non collegato, lo script ti chiederà di rimuoverlo. Questo messaggio proviene dal comando Remove-GPO
utilizzando lo switch Confirm
. Per confermare la rimozione di quel singolo GPO, fai clic su Sì, altrimenti, fai clic su Sì per tutti per rimuovere tutti i GPO non collegati senza ulteriori conferme.

Dopo che lo script è completo e ha trovato almeno un GPO non collegato, dovresti vedere nella cartella C:\GPOBackup\<data> il contenuto del GPO come una cartella GUID insieme ai rapporti HTML e al file UnlinkedGPOs.txt.

4. Ora, apri uno dei rapporti HTML del GPO con un browser web. Puoi vedere che il rapporto contiene tutte le impostazioni definite in quel GPO. Nell’esempio seguente, il GPO UnlinkedGPO1 contiene impostazioni per la policy di esecuzione di PowerShell.

5. Infine, apri il file UnlinkedGPOs.txt. Vedrai che contiene lo stesso output che hai ricevuto dal comando Get-GPO
.

Conclusione
Ora dovresti sapere come trovare tutti quei GPO non collegati nel tuo ambiente AD utilizzando il GPMC e PowerShell.
Quale metodo preferisci? Puoi pensare a un modo per migliorare lo script PowerShell descritto?