Come trovare (e rimuovere) GPOS non collegati in Active Directory

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:

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.

Search option in GPMC console

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.

Adding search item in “Search for Group Policy Objects” window

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

using search option in “Search for Group Policy Objects” window

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

Search results for linked GPOs

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.

Comparing search results with all the Group Policy Objects

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.

Displaying linked GPO

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.

Import-Module GroupPolicy

3. Esegui il cmdlet PowerShell Get-GPO utilizzando il parametro All. Questo cmdlet interroga AD e restituisce tutte le GPO trovate.

Get-GPO -All
Get-Gpo cmdlet output

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.

Get-GPOReport -Name SomeGPO -ReportType XML

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.

Sample output containing LinksTo section

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.

Get-GPO -All | Where-Object {
     $_ | Get-GPOReport -ReportType XML | Select-String -NotMatch "<LinksTo>"
 }

Nell’ambiente del tutorial, puoi vedere nell’esempio seguente che UnlinkedGPO1 e UnlinkedGPO2 non sono collegati a nessuna OU.

Listing out unlinked GPO in the domain

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

Import-Module GroupPolicy
 $Date = Get-Date -Format dd_MM_yyyy
 $BackupDir = "c:\GPOBackup\$Date"
## Crea una directory per memorizzare i report GPO
 if (-Not(Test-Path -Path $BackupDir))  {
   New-Item -ItemType Directory $BackupDir -Force
 }
# Ottieni tutti i GPO con il tipo di report gpo come XML e cerca anche la sezione nel report XML.
# Considera solo i GPO che non hanno la sezione.
 Get-GPO -All | Where-Object { $_ | Get-GPOReport -ReportType XML | Select-String -NotMatch "<LinksTo>" } | ForEach-Object {
   # Il backup del GPO, il report HTML e il salvataggio dei dettagli del GPO su file di testo sono opzionali.
   Backup-GPO -Name $_.DisplayName -Path $BackupDir
    # Esegui il report e salvalo come report HTML su disco
   Get-GPOReport -Name $_.DisplayName -ReportType Html -Path "$BackupDir\$($_.DisplayName).html"
   # Crea e aggiungi a un file di testo chiamato UnlinkedGPOs.txt nella cartella di backup che
   # contiene ogni oggetto GPO restituito da Get-GPO
   $_ | Select-Object * | Out-File "$BackupDir\UnLinkedGPOs.txt" -Append
   # Rimuovi il GPO ma prima chiedi prima di rimuoverlo
   $_.Displayname | Remove-GPO -Confirm
 }

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 , altrimenti, fai clic su Sì per tutti per rimuovere tutti i GPO non collegati senza ulteriori conferme.

GPO deletion confirmation prompt

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.

Displaying Backup Folder

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.

GPO HTML report

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

UnlinkedGPOs.txt GPO listing

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?

Source:
https://adamtheautomator.com/unlinked-gpo/