Questa è la parte II di una serie in due parti sugli Active Directory health checks. Sebbene non sia necessaria la lettura, se desideri scoprire come è stato creato lo script PowerShell che imparerai in questo articolo, ti incoraggio a dare un’occhiata a Building an Active Directory Health Check Tool [Approfondito]: Parte I.
Nella Parte I, hai appreso quanti diversi test multipli e perché sono importanti. Ora mettiamoli tutti insieme e creiamo uno strumento. In questa parte, convertirai tutti gli Active Directory health checks spiegati nella Parte I in un framework di test. Imparerai anche come visualizzare i risultati di vari controlli di salute AD in strumenti come Pester e un tool di monitoraggio chiamato PRTG.
Per seguire o vedere una versione completa dello strumento di cui parlerai in questo articolo, scarica lo script ADHealthCheck-NoResult.ps1 da GitHub.
Definizione dell’Output
Avere un tipo di oggetto comune e un modo semplice per generarli renderà molto più facile convertire i risultati dei test nello strumento da te scelto.
Per creare un output uniforme per tutti gli strumenti potenziali, ho scelto di utilizzare una classe PowerShell. Sebbene non sia necessario, è l’approccio che ho scelto qui. Il punto principale è assicurarsi che tutti i controlli di salute AD restituiscano lo stesso tipo di output.
A PowerShell class is a schema that defines how a PowerShell object should look and what it should do. Each line you see below represents a property the objects return will have. You can see below I’m planning on each AD health check to return ten properties.
Per velocizzare la creazione di questa classe, utilizzerò una funzione di aiuto chiamata New-AdhcResult. Questa funzione crea la classe e tutto ciò di cui avrai bisogno per seguirla. Questa funzione restituirà un oggetto di tipo
[AdhcResult]
personalizzato.
Esecuzione dello Strumento di Controllo della Salute AD
Per prima cosa, scarica e copia lo script di controllo della salute AD su un controller di dominio. Aprilo con PowerShell ISE ed eseguilo. Questa parte dello strumento non restituirà alcuna informazione.
Lo script verrà eseguito e memorizzerà il risultato di ciascun controllo nella variabile $TestResults
come più oggetti [AdhcResult]
. Utilizzerai questi oggetti in seguito per generare rapporti o per emetterli in vari strumenti. Conservare i risultati del controllo della salute in una variabile del genere ti consente di aggiungere ulteriori risultati se decidi di crearne un altro e utilizzare il comando New-AdHcResult
.
Una volta completata l’esecuzione dello script, dovresti ora avere un set completo di oggetti di controllo della salute AD memorizzati nella variabile $TestResults
. Ora puoi eseguire $TestResults
dalla console e visualizzare i risultati grezzi.
Visualizzazione dei Risultati del Controllo della Salute AD negli Strumenti
Dato che tutti i controlli sono in un tipo di oggetto comune, puoi ispezionarli meglio attraverso un paio di strumenti come Pester e PRTG.
In questa sezione, imparerai come creare un rapporto HTML con uno strumento chiamato extent e visualizzare il rapporto in PRTG.
Creare un file XML nUnit con Pester
Prima di tutto, devi convertire gli oggetti PowerShell in un formato comprensibile dai tuoi strumenti. La maggior parte degli strumenti comprende XML o, più specificamente, XML nUnit. Questo è un formato che puoi importare in vari strumenti per visualizzare i risultati.
Dato che stai lavorando con PowerShell, userai il framework di test Pester per leggere l’output dello script di verifica della salute di AD e generare un file XML nUnit
Inizia scaricando l’ultima versione di Pester. Puoi scaricare Pester eseguendo Install-Module
in una console PowerShell con privilegi elevati. Il comando seguente forzerà l’installazione dell’ultima versione di Pester. Poiché il certificato publisher con cui Pester è firmato è incluso in Windows 10, dovremo utilizzare il parametro SkipPublisherCheck
per installarlo.
Una volta che Pester è disponibile, puoi eseguire lo script e creare dinamicamente un set di test Pester.
Nota: Puoi anche creare tu stesso i test Pester senza utilizzare lo script PowerShell che ho fornito.
Lo script PowerShell seguente utilizzerà Pester per generare un file XML nUnit dall’output della variabile $TestResults
definita nello script ADHealthCheck-NoResult.ps1.
Salva questo file come Pester.ps1 nella stessa cartella dello script di controllo della salute di AD.
Infine, esegui Invoke-Pester
qui sotto per invocare il file Pester.ps1 e salvare i risultati nel formato NUnitXml
.
Creazione di un rapporto HTML con lo strumento Extent
Una volta ottenuto il file XML di NUnit, puoi ora utilizzarlo per passarlo a uno strumento che può convertirlo in HTML. Uno di quegli strumenti si chiama extent. Extent è uno strumento utile per creare rapporti HTML da file XML di Nunit.
Prima di tutto, scarica extent nella stessa directory del file NunitReport.xml creato in precedenza. Quindi esegui i seguenti comandi in una sessione di PowerShell. Questi comandi creeranno la directory per memorizzare i file HTML e quindi eseguiranno extent.exe per effettuare la conversione.
Una volta completato, troverai due file HTML nella directory HTMLReports. Questi file assomiglieranno alle schermate sottostanti quando li apri con un browser web.


Incorporazione dei risultati del controllo della salute di AD in PRTG
PRTG è un popolare strumento di monitoraggio sviluppato da Paessler che puoi utilizzare per monitorare la tua infrastruttura e i tuoi servizi. In questa sezione, imparerai come inviare i risultati del controllo di salute a PRTG una volta eseguito lo script di controllo di salute.
Inviare i risultati a PRTG richiede più lavoro rispetto a far sì che lo strumento prelevi le informazioni, ma alla fine vedrai che la configurazione varrà il tempo impiegato.
Prerequisiti
Per impostare correttamente PRTG come strumento di monitoraggio per lo script di controllo di salute AD creato in questo articolo, assicurati di avere:
- PRTG installato e configurato
- Tutti i controller di dominio configurati in PRTG
- Lo script PowerShell Send-AdhcResultToPrtg.ps1 scaricato da GitHub
- L’URL e la porta del tuo sensore PRTG
Se hai completato ognuno dei prerequisiti, puoi seguire le istruzioni passo passo di seguito su come consiglio di inviare questi risultati del controllo di salute AD a PRTG.
- Crea un dispositivo in PRTG chiamato Domain o con il nome che preferisci.
- Crea un sensore push HTTP avanzato con un IdentityToken di directory-adhealthcheck. Nota che è sensibile alle maiuscole e minuscole!
- Per ogni dispositivo controller di dominio in PRTG, crea un sensore push HTTP avanzato. Per ogni IdentityToken, aggiungi a ciascun sensore -adhealthcheck come ad esempio dc01-adhealthcheck.
- Aggiungi i contenuti dello script PowerShell Send-AdhcResultToPrtg.ps1 alla fine dello script PowerShell ADHealthCheck-NoResult.ps1 che abbiamo trattato.
- Modifica la variabile
$PRTGUrl
con l’URL e la porta del tuo sensore PRTG. - Esegui lo script.
Una volta completato, quando lo script di controllo della salute di AD completa l’esecuzione, dovrebbe ora inviare lo stato ai tuoi sensori PRTG come mostrato di seguito.

Programmazione dello Script di Controllo della Salute di Active Directory
Monitorare la salute di AD è un processo continuo. Dovresti eseguire test tutto il tempo piuttosto che istanze ad-hoc. Vediamo come programmare lo script di controllo della salute di Active Directory per eseguirsi a intervalli frequenti.
Il modo più semplice di automatizzare questi controlli è aggiungere lo script al pianificatore attività e farlo eseguire con un account utente AD o un Account di Servizio Gestito dal Gruppo.
Utilizzare un Account di Servizio Gestito dal Gruppo (gMSA) è il modo più sicuro per eseguire attività pianificate autonomamente poiché solo gli account computer specificati possono recuperare la password da AD. Tuttavia, alcune organizzazioni potrebbero non avere questa opportunità.
Creazione di un Account Utente AD
Iniziamo analizzando cosa serve per configurare un account utente AD per eseguire il compito pianificato.
Se prevedi di eseguire un’attività pianificata come account utente, per favore, non farlo come tuo account personale! Crea sempre un account utente separato a questo scopo.
Per risparmiare tempo, di seguito troverai uno script PowerShell. Questo è uno script di esempio che puoi utilizzare per creare un account utente AD che fa parte del gruppo Domain Admins. Puoi quindi utilizzare questo account per eseguire attività pianificate.
Creazione di un Account di Servizio Gestito dal Gruppo
Utilizzare un gMSA per eseguire il controllo dello stato di salute è un po’ più complicato se non stai già utilizzando gMSA nel tuo ambiente, ma è molto più sicuro.
Creazione di una Chiave Radice KDS
Per creare un account gMSA per eseguire lo script di controllo dello stato di salute di AD, aggiungi prima una chiave radice KDS se non ne hai già una. Puoi verificare se hai una chiave radice KDS eseguendo il comando PowerShell Get-KDSRootKey
su un controller di dominio.
Se non si dispone di una chiave radice KDS, è possibile crearne una eseguendo Add-KDSRootKey -EffectiveImmediately
con un account utente che fa parte del gruppo Domain Admins AD su un controller di dominio 2012R2 o successivo.
La chiave deve essere replicata agli altri controller di dominio per avere pieno effetto. Ulteriori informazioni su questo processo sono disponibili nella documentazione Microsoft.
Creazione del gMSA
Una volta creata la chiave radice KDS, è possibile creare l’account gMSA con PowerShell. Di seguito è riportato uno script di esempio da utilizzare per creare l’account gMSA consentito solo per l’autenticazione da un controller di dominio nel gruppo Domain Admins.
Installazione e test del gMSA
Ora che il gMSA è stato creato, l’ultimo passo è installarlo e testarlo su tutti i controller di dominio. Un modo per farlo è utilizzare il comando PowerShell Invoke-Command
. Di seguito puoi vedere uno script PowerShell che installerà il gMSA su tutti i DC e garantirà che funzioni correttamente.
Dare il permesso al gMSA di eseguire un lavoro batch
Una volta installato il gMSA, ora è necessario concedergli il permesso di eseguire un lavoro batch sui DC. L’account ha bisogno di questo diritto poiché verrà eseguito autonomamente in background in un’attività pianificata.
Puoi impostare questo permesso tramite una GPO esistente o creandone una nuova e collegandola all’OU Controller di dominio. Se non hai già una GPO da utilizzare, di seguito sono riportati alcuni passaggi che puoi seguire per crearne una.
- Avvia l’Editor delle Policy del Gruppo su un DC.
- Fai clic con il pulsante destro del mouse sull’OU Controller di dominio e seleziona Crea GPO in questo dominio e collegalo qui.
- Dagli un nome come DC – Esegui come batch o un altro nome che preferisci
- Fai clic con il pulsante destro del mouse sulla GPO e seleziona Modifica.
- Vai su Configurazione computer –> Impostazioni Windows –> Impostazioni di sicurezza –> Diritti utente assegnati.
- Fare clic sinistro su Accedi come attività batch e fare clic su Proprietà.
- Fare clic su Aggiungi utente o Gruppo
- Fare clic su Tipo di Oggetto, selezionare solo Account Servizio e fare clic su OK.
- Cercare l’account del servizio svcADHealthCheck creato in precedenza, selezionarlo e fare clic su OK.
Ora dovresti vedere la gMSA nell’elenco degli oggetti AD come mostrato di seguito.

Creazione dell’attività pianificata
Ora che hai creato un account per eseguire le attività pianificate, puoi creare l’attività pianificata stessa su un server connesso al dominio a tua scelta.
Puoi creare l’attività pianificata tramite l’interfaccia grafica, ma ciò richiede troppi clic! Invece, ti consiglio di crearla con PowerShell. Perché? Perché puoi semplicemente copiare il codice che vedi qui sotto e basta.
Sotto troverai due script; entrambi gli script sono simili, ma uno presume un account utente AD e l’altro presume una gMSA. Assicurati di utilizzare lo script appropriato in base all’account che stai utilizzando.
Hai finito! In questo momento, il compito pianificato verrà eseguito con l’intervallo fornito in uno dei script sopra.
Summary
Uff! Se hai seguito fino a qui dalla Parte I, dovresti ormai sapere che la salute di AD è un argomento complesso. C’è così tanto da dire su questo argomento che nemmeno due lunghi post potrebbero coprire tutto.
Ma, a questo punto, dovresti avere abbastanza conoscenza e un framework PowerShell pre-costruito che puoi utilizzare per altri controlli di salute di Active Directory che possono sorgere.
Ulteriori letture
Source:
https://adamtheautomator.com/active-directory-health-check-2/