Adam Automator

dette er del II av En todelt serie På Active Directory helsesjekker. Selv om det ikke er nødvendig å lese, hvis Du vil lære hvordan PowerShell-skriptet du lærer om i denne artikkelen ble bygget, oppfordres Du Til Å sjekke Ut Å Bygge Et Active Directory-Helsekontrollverktøy : Del I.

I Del I lærte Du hvor mange forskjellige flere tester og hvorfor de er viktige. La oss nå trekke dem alle sammen og bygge et verktøy. I denne delen konverterer du Alle Active Directory – helsekontrollene forklart I Del I til et testramme. Du lærer også hvordan du utfører resultater av ULIKE ANNONSEHELSEKONTROLLER til verktøy som Pester og et overvåkingsverktøy kalt PRTG.

for å følge med eller se en ferdig versjon av verktøyet du skal lære om i denne artikkelen, last Ned ADHealthCheck-NoResult. ps1 skriptet fra GitHub.

Innholdsfortegnelse

Definere Utdata

Å Ha en felles objekttype og en enkel måte å generere det på, gjør det mye enklere å konvertere testresultater til verktøyet du ønsker.

for å lage en jevn utgang for alle potensielle verktøy, har jeg valgt å bruke En PowerShell-klasse. Selv om det ikke er nødvendig, er det tilnærmingen jeg har valgt å ta her. Hovedpoenget er å sikre AT ALLE AD helsesjekker returnere samme type utgang.

En PowerShell-klasse er et skjema som definerer hvordan Et PowerShell-objekt skal se ut og hva Det skal gjøre. Hver linje du ser nedenfor representerer en egenskap objektene retur vil ha. Du kan se nedenfor jeg planlegger på HVER ANNONSE helsesjekk for å returnere ti egenskaper.

Class AdhcResult { $Source $TestName $Pass $Was $ShouldBe $Category $SubCategory $Message $Data ]$Tags}

For å fremskynde denne klasseopprettelsen bruker jeg En hjelpefunksjon kalt New-AdhcResult. Denne funksjonen skaper klassen og alt du trenger å følge med. Denne funksjonen vil sende ut et tilpasset – typeobjekt.

Kjøre Verktøyet Ad Health Check

last ned og kopier AD health check-skriptet Først til en domenekontroller. Åpne Den med PowerShell ISE og kjør den. Denne delen av verktøyet vil ikke returnere noen informasjon.

ths script vil kjøre og lagre resultatet av hver sjekk i $TestResults variabelen som flere objekter. Du vil bruke disse objektene senere for å generere rapporter eller sende det ut i ulike verktøy. Hvis du holder helsesjekkresultatene i en variabel som dette, kan du legge til flere resultater hvis du velger å opprette en annen og bruke kommandoen New-AdHcResult.

når skriptet er ferdig, bør du nå ha et komplett sett MED ad health check-objekter lagret i variabelen $TestResults. Du kan nå kjøre $TestResults fra konsollen og se råresultatene.

Vise Resultatene AV Ad Health Check I Verktøy

siden alle kontrollene er i en vanlig objekttype, kan du bedre inspisere dem gjennom et par verktøy som Pester og PRTG.

i denne delen skal du lære å lage EN HTML-rapport med et verktøy som heter grad og å vise rapporten I PRTG.

Opprette EN NUNIT XML-Fil Med Pester

du må først konvertere PowerShell-objektene i et format verktøyene dine kan forstå. DE fleste verktøy forstår XML eller, mer spesifikt, NUNIT XML. Dette er et format som du kan importere til ulike verktøy for å vise resultater.

siden Du arbeider Med PowerShell, bruker Du Rammeverket For Pestertesting til å lese utdataene fra ad health check-skriptet og til å generere EN NUNIT XML-fil

Start med å laste ned den nyeste versjonen Av Pester. Du kan laste Ned Pester ved å kjøre Install-Module i en forhøyet PowerShell-konsoll. Kommandoen nedenfor vil tvinge en installasjon av den nyeste Pester-versjonen. Siden utgiversertifikatet Som Pester er signert med, kommer Med Windows 10, må vi bruke parameteren SkipPublisherCheck for å installere den.

PS51> Install-Module Pester -Force -Verbose -SkipPublisherCheck

Når Pester er tilgjengelig, kan du kjøre skriptet og dynamisk opprette Et sett Med Pester-tester.

Merk: Du kan også lage Pestertester selv uten å bruke PowerShell-skriptet jeg har gitt.

powershell-skriptet nedenfor vil bruke Pester til å generere EN NUNIT XML-fil fra utgangen av $TestResults – variabelen definert i ADHealthCheck-NoResult.ps1-skriptet.

Lagre denne filen Som Pester. ps1 i samme mappe som ad health check-skriptet.

# dot source in the ADHealthCheck file. $PSScriptRoot\ADHealthCheck-NoResult.ps1$Grouped = $TestResults | Group-Object CategoryForeach($Category in $Grouped) { Describe -Name $Category.Name -Tags ($Category.Group.Tags | Select -Unique) { Foreach($Result in $Category.Group){ Context "$($Result.Source) - $($Result.TestName)" { It -Name "Should've passed" { $Result.Pass | Should -Be -ExpectedValue $True -Because $Result.data } } } }}

Til Slutt, kjør Invoke-Pester nedenfor for å påkalle Pester.ps1 fil og lagre resultatene i NUnitXml format.

PS51 > Invoke-Pester -Script @{Path = '.\Pester.ps1'} -OutputFile .\NunitReport.xml -OutputFormat NUnitXml

Bygg EN HTML-Rapport Med Extent Tool

Når Du har NUNIT XML-filen, kan du nå bruke denne filen til å overføre til et verktøy som kan konvertere DET TIL HTML. Et av disse verktøyene kalles omfang. Grad er et hendig verktøy for å lage HTML-rapporter Fra NUNIT XML-filer.

last ned først omfang til samme katalog som nunitreport.xml-fil opprettet tidligere. Kjør deretter følgende kommandoer i En PowerShell-økt. Disse kommandoene vil opprette katalogen for å lagre HTML-filene og deretter utføre omfang.exe å gjøre konverteringen.

# Create report directoryPS51> mkdir .\HTMLReports# Create the reportPS51> .\extent.exe -i .\NunitReport.xml -o .\HTMLReports\

når du er ferdig, finner du to HTML-filer i HTMLReports-katalogen. Disse filene vil ser ut som under skjermbilder du åpner dem med en nettleser.

HTML rapport For Pester test utgang
HTML rapport For Pester test utgang
HTML rapport For Pester test utgang
HTML rapport For Pester test utgang

Inntak AV Ad Health Check-Resultater I PRTG

PRTG ER et populært overvåkingsverktøy utviklet Av Paessler som Du kan bruke til å overvåke infrastrukturen og tjenestene dine. I denne delen lærer du hvordan du skyver helsekontrollresultatene TIL PRTG når helsekontrollskriptet har kjørt.

Pushing resultater TIL PRTG tar mer arbeid i stedet for å ha verktøyet pull informasjon, men du vil til slutt se oppsettet er vel verdt tiden brukt.

Forutsetninger

for å kunne sette OPP PRTG som et overvåkingsverktøy for ad health check-skriptet som er bygget i denne artikkelen, må du være sikker på at DU har:

  • PRTG installert og konfigurert
  • alle domenekontrollere satt opp I PRTG
  • Send-AdhcResultToPrtg.ps1 PowerShell script lastet ned fra GitHub
  • URL og port av y0ur PRTG sensor

hvis du har hver av de prereqs gjort, kan du deretter følge nedenfor trinnvise instruksjoner om hvordan jeg anbefaler å presse DISSE AD helsesjekk resultater TIL PRTG.

  1. Opprett en enhet I PRTG som heter Domain eller det navnet du foretrekker.
  2. Opprett En Avansert HTTP push-sensor med En IdentityToken av directory-adhealthcheck. Merk at dette er case sensitive!
  3. opprett En Avansert HTTP push-sensor for hver domenekontrollerenhet I PRTG. For hver Identitetstoken legger du til hver sensor med-adhealthcheck som dc01-adhealthcheck.
  4. Legg til innholdet I Send-AdhcResultToPrtg. ps1 PowerShell-skriptet til slutten av ADHealthCheck-NoResult.ps1 PowerShell-skriptet vi har dekket.
  5. Endre variabelen $PRTGUrl TIL URL-ADRESSEN og porten TIL prtg-sensoren.
  6. Utfør skriptet.

når DU er ferdig, NÅR ad health check-skriptet er fullført, skal det nå skyve status TIL PRTG-sensorene dine som vist nedenfor.

PRTG sensorer som viser AD helse
PRTG sensorer som viser AD helse

Planlegging Av Active Directory Helsesjekk Script

Overvåking AD helse er en pågående prosess. Du bør kjøre tester hele tiden i stedet for ad hoc-forekomster. La oss planlegge Active Directory helsesjekk skriptet til å kjøre med jevne mellomrom.

den enkleste måten å automatisere disse kontrollene på, er ved å legge til skriptet i oppgaveplanleggeren og la det kjøre under EN AD – brukerkonto eller En Gruppestyrt Tjenestekonto.

bruk Av En gruppe Administrert Tjenestekonto (gMSA) Er den sikrere måten å utføre planlagte oppgaver selvstendig, siden bare angitte datamaskinkontoer som kan hente passordet fra AD. Men noen organisasjoner har kanskje ikke denne luksusen.

Opprette EN AD-Brukerkonto

La oss først bryte ned det som trengs for å få EN AD-brukerkonto konfigurert til å kjøre den planlagte oppgaven.

hvis du skal kjøre en planlagt oppgave som en brukerkonto, må du for all del ikke kjøre den som din egen konto! Opprett alltid en egen brukerkonto for dette formålet.

for å spare tid tid, vil du se Et PowerShell-skript nedenfor. Dette er et eksempelskript du kan bruke til å opprette EN ANNONSEBRUKERKONTO som er en del av Domeneadministratorer-gruppen. Du kan deretter bruke denne kontoen til å kjøre planlagt oppgave med.

# Change this to the OU of your service accounts$OU = "OU=Service Accounts,DC=contoso,DC=com"# Change this to the password that you want to use for the account$Password = "JägareTvå"$SecureString = $Password | ConvertTo-SecureString -AsPlainText -ForceNew-ADUser -Enabled $True -Path $OU -Name svcADHealthCheck -AccountPassword $SecureString# Restrict account to only Domain Controllers$DomainControllers = (Get-ADDomainController -Filter *).NameSet-ADAccount -Identity svcADHealthCheck -LogonWorkstations ($DomainControllers -Join ",")# Making it Domain Admin (Sorry)Add-ADGroupMember -Identity "Domain Admins" -Members svcADHealthCheck

Opprette En Gruppestyrt Tjenestekonto

Å Bruke en gMSA til å kjøre helsekontrollen er litt vanskeligere hvis du ikke bruker gMSA i miljøet ditt allerede, men det er mye sikrere.

Opprette EN Kds-Rotnøkkel

hvis du vil opprette en gMSA-konto for å kjøre skriptet ad health check, må du først legge TIL en kds-rotnøkkel hvis du ikke allerede har en. Du kan sjekke om DU har en kds-rotnøkkel ved å kjøre powershell-kommandoen Get-KDSRootKey på en domenekontroller.

hvis DU ikke har en kds-rotnøkkel, oppretter du en VED å kjøre Add-KDSRootKey -EffectiveImmediately under en brukerkontodel i Domeneadministrator-ANNONSEGRUPPEN på en domenekontroller FRA 2012r2 eller nyere.

nøkkelen må replikere ut til de andre domenekontrollere for å få full effekt. Du finner Mer informasjon om denne prosessen I microsoft-dokumentasjonen.

Opprette gMSA

Når KDS-rotnøkkelen er opprettet, er du klar til å opprette gMSA-kontoen Med PowerShell. Nedenfor kan du se et eksempelskript som skal brukes til å opprette gMSA-kontoen som bare kan godkjennes fra en domenekontroller i Domeneadministratorer-gruppen.

# Change to your domain$Domain = "contoso.com"$AccountName = "svcadhealthcheck"# Create a GMSA called svcadhealthcheck (or in reality svcadhealthcheck$) and allow only Domain Controllers to fetch the passwordNew-ADServiceAccount $AccountName -DNSHostName "$AccountName.$Domain" –PrincipalsAllowedToRetrieveManagedPassword "Domain Controllers"# Add the GMSA to Domain Admins# Note that we're adding the the account by it's true SamAccountName 'svcadhealthcheck$'Add-ADGroupMember -Identity "Domain Admins" -Members "$AccountName`$"

Installere og Teste gMSA

nå er gMSA opprettet, det siste trinnet er å installere og teste det på alle domenekontrollere. En måte å gjøre dette på er å bruke powershell-kommandoen Invoke-Command. Nedenfor kan du se Et PowerShell-skript som vil installere gMSA på alle Dc-Er og sikre at det fungerer som det skal.

# This will run on all Domain ControllersInvoke-Command -ComputerName (Get-ADDomainController -Filter *).Name -ScriptBlock { $Account = Get-ADServiceAccount -Filter { Name -eq 'svcadhealthcheck'} Install-ADServiceAccount $Account # Tests that the GMSA works on the computer # Returns $True if tests are OK $Test = Test-ADServiceAccount -Identity $Account.Name if($Test){ Write-Output "GMSA test OK on $env:computername" } else { Write-Output "GMSA test FAILED on $env:computername" }}

gir gMSA Tillatelse Til Å Kjøre Som En Satsvis Jobb

Når gMSA er installert, må du nå gi den tillatelse til å kjøre som en satsvis jobb på DCs. Kontoen trenger denne retten siden den kjører autonomt i bakgrunnen i en planlagt oppgave.

du kan angi denne tillatelsen via et eksisterende GPO eller ved å opprette et nytt GPO og koble Det til Domenekontrollere ou. Hvis DU ikke allerede har EN GPO å bruke, nedenfor er noen trinn du kan ta for å opprette en.

  1. Start Gruppepolicyredigereren på EN DC.
  2. Høyreklikk På Domenekontrollere OU og velg Opprett GPO i dette domenet og koble det her.
  3. Gi DET NAVNET DC-Logon som batch eller et annet navn du foretrekker
  4. Høyreklikk GPO og Klikk Rediger.
  5. Gå Til Datamaskinkonfigurasjon- > Windows-Innstillinger- > Sikkerhetsinnstillinger- > Brukerrettighetstildeling.
  6. Venstre-klikk Logg på som satsvis jobb og klikk Egenskaper.
  7. Klikk Legg til bruker eller Gruppe.
  8. Klikk På Objekttyper, velg Bare Tjenestekontoer og klikk OK.
  9. Søk etter svcADHealthCheck-tjenestekontoen som ble opprettet tidligere, velg DEN og klikk OK.

du skal nå se gMSA under LISTEN OVER AD-objekter som vist nedenfor.

gMSA gitt rettigheter til pålogging som en satsvis jobb
gMSA gitt rettigheter til pålogging som en satsvis jobb

Opprette Den Planlagte Oppgaven

Nå som du har en konto opprettet for å kjøre de planlagte oppgavene, kan du nå opprette den planlagte oppgaven selv på en domenetilknyttet server etter eget valg.

du kan opprette den planlagte oppgaven via GUI, men det er for mye å klikke! I stedet anbefaler jeg å lage Den med PowerShell. Hvorfor? Fordi du bare kan kopiere koden du ser nedenfor og bli ferdig med den.

Nedenfor finner du to skript; begge skriptene er like, men man antar EN AD brukerkonto og den andre antar en gMSA. Sørg for å bruke riktig skript basert på hvilken konto du bruker.

# Replace with the path to your script$ScriptPath = "C:\Scripts\ADHealthCheck.ps1"# Replace with the username of the account that you created to run the task$UserName = "svdADHealthCheck"# Replace with the password that you set for above account$Password = "JägareTvå!"# Create the action that launches the script$Action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ExecutionPolicy bypass -File '$ScriptPath'"# Create the trigger that starts the task$Trigger = New-ScheduledTaskTrigger -Once -At "12:00" -RepetitionInterval (New-TimeSpan -Hours 12)# Create settings for the scheduled task$Settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable -RunOnlyIfNetworkAvailable -DontStopOnIdleEnd# Create the scheduled task using a splat for readability$Splat = @{ User = "$env:USERDOMAIN$UserName" Password = $Password TaskName = "ADHealthCheck" Action = $Action Trigger = $Trigger RunLevel = "Highest" Settings = $Settings}Register-ScheduledTask @Splat
# Replace with the path to your script$ScriptPath = "C:\Scripts\ADHealthCheck.ps1"# Replace with the username of the account that you created to run the task$UserName = "svdADHealthCheck$"# Create the action that launches the script$Action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ExecutionPolicy bypass -File '$ScriptPath'"# Create the trigger that starts the task$Trigger = New-ScheduledTaskTrigger -Once -At "12:00" -RepetitionInterval (New-TimeSpan -Hours 12)# Create settings for the scheduled task$Settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable -RunOnlyIfNetworkAvailable -DontStopOnIdleEnd# Create principal that defines the GMSA$Principal = New-ScheduledTaskPrincipal -UserID "$env:USERDOMAIN$UserName" -LogonType Password -RunLevel Highest# Create the scheduled task using a splat for readability$Splat = @{ Principal = $Principal TaskName = "ADHealthCheck" Action = $Action Trigger = $Trigger RunLevel = "Highest" Settings = $Settings}Register-ScheduledTask @Splat

Du er ferdig! På dette tidspunktet vil den planlagte oppgaven utføres med intervallet som er gitt i et av skriptene ovenfor.

Sammendrag

Whew! Hvis du har fulgt langs hele veien Fra Del I, bør du vite nå AT AD helse er et dypt emne. Det er så mye til dette emnet at ikke engang to lange blogginnlegg kunne dekke.

men nå bør du ha nok kunnskap og et forhåndsbygd PowerShell-rammeverk som du kan koble til Andre Active Directory-helsekontroller når de oppstår.

Videre Lesing

  • Noen ting du kanskje ikke vet Om AD og Disaster Recovery
  • Hva gjør DCDIAG egentlig…?