Adam the Automator

tämä on osa II kaksiosaisesta sarjasta Active Directory health checks. Vaikka et tarvitse lukemista, jos haluat tietää, miten tässä artikkelissa oppimasi PowerShell-skripti on rakennettu, sinua kannustetaan tarkistamaan Active Directory Health Check Tool: Part I.

in Part I, opit kuinka monta eri testiä ja miksi ne ovat tärkeitä. Nyt vedetään ne kaikki yhteen ja rakennetaan työkalu. Tässä osassa muutat kaikki osassa I kuvatut Active Directory-kuntotarkastukset testikehykseksi. Opit myös tulostamaan erilaisten mainosten terveystarkastusten tulokset työkaluihin, kuten Pester ja seurantatyökalu nimeltä PRTG.

jos haluat seurata tai nähdä valmiin version työkalusta, josta tulet oppimaan tässä artikkelissa, lataa ADHealthCheck-Noesult. ps1-skripti GitHubista.

Sisällysluettelo

määrittelemällä tuloste

, jolla on yhteinen objektityyppi ja helppo tapa tuottaa se, on paljon helpompi muuntaa testitulokset haluamaasi työkaluun.

luodakseni yhtenäisen ulostulon kaikille mahdollisille työkaluille, olen päättänyt käyttää PowerShell-luokkaa. Vaikka sitä ei tarvita, se on lähestymistapa, jonka olen valinnut täällä. Tärkeintä on varmistaa, että kaikki AD terveystarkastukset palauttavat samantyyppisen tuotoksen.

PowerShell-luokka on skeema, joka määrittelee, miltä PowerShell-objektin tulisi näyttää ja mitä sen pitäisi tehdä. Jokainen rivi näet alla edustaa omaisuutta objektien palata on. Alta näet, että suunnittelen jokaisen mainoksen kuntotarkastuksen palauttaakseni kymmenen kiinteistöä.

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

tämän luokan luomisen nopeuttamiseksi käytän Auttajatoimintoa nimeltä New-AdhcResult. Tämä toiminto luo luokan ja kaiken mitä sinun täytyy seurata mukana. Tämä funktio tulostaa mukautetun – tyypin objektin.

Suorita AD Health Check-työkalu

ensin, lataa ja kopioi AD health check-skripti verkkotunnuksen ohjaimeen. Avaa se PowerShell ISE: llä ja suorita se. Tämä osa työkalun ei palauta mitään tietoja.

Ths-skripti suorittaa ja tallentaa jokaisen tarkistuksen tuloksen $TestResults muuttujaan monina olioina. Voit käyttää näitä esineitä myöhemmin tuottaa raportteja tai outputing se eri työkaluihin. Pitämällä kuntotarkastuksen tuloksia tällaisessa muuttujassa voit lisätä lisää tuloksia, jos haluat luoda uuden muuttujan ja käyttää komentoa New-AdHcResult.

kun skripti on valmis, sinun pitäisi nyt tallentaa täydellinen ad health check-objektien sarja $TestResults – muuttujaan. Voit nyt ajaa $TestResults konsolista ja nähdä raa ’ at tulokset.

ad Health Check-tulosten näyttäminen työkaluissa

koska kaikki tarkastukset ovat yhteisessä objektityypissä, voit tarkastaa ne paremmin parin työkalun, kuten Pesterin ja PRTG: n avulla.

tässä osiossa opit luomaan HTML-raportin extent-työkalulla ja näyttämään raportin PRTG: ssä.

nunit XML-tiedoston luominen Pester

– ohjelmalla sinun täytyy ensin muuntaa PowerShell-objektit muotoon, jonka työkalusi voivat ymmärtää. Useimmat työkalut ymmärtävät XML tai tarkemmin, nUnit XML. Tämä on muoto, jonka voit tuoda erilaisiin työkaluihin tulosten näyttämiseksi.

koska työskentelet PowerShellin kanssa, käytät Pester testing Frameworkia lukemaan tulosteen AD health check-skriptistä ja luomaan nunit XML-tiedoston

Aloita lataamalla Pesterin uusin versio. Voit ladata Pesterin ajamalla Install-Module korotetussa PowerShell-konsolissa. Alla oleva komento pakottaa asentamaan uusimman Pester-version. Koska julkaisijan varmenne, jolla Pester on allekirjoitettu, tulee Windows 10: n mukana, meidän täytyy käyttää SkipPublisherCheck – parametria sen asentamiseen.

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

kun Pester on saatavilla, voit sitten suorittaa käsikirjoituksen ja dynaamisesti luoda joukon Pester-testejä.

HUOM: Voit myös luoda Pester-testejä itse ilman edes antamaani PowerShell-komentosarjaa.

alla oleva PowerShell-skripti käyttää Pesteriä nunitin XML-tiedoston luomiseen ADHealthCheck-Noesult.ps1-skriptissä määritellyn $TestResults muuttujan tulosteesta.

Tallenna tämä tiedosto nimellä Pester.ps1 samaan kansioon kuin AD health check script.

# 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 } } } }}

lopuksi juostaan Invoke-Pester alle vetoamaan kiusaajaan.PS1-tiedosto ja tallenna tulokset NUnitXml – muodossa.

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

HTML-raportin rakentaminen Laajuustyökalulla

kun sinulla on nunit XML-tiedosto, voit nyt käyttää tätä tiedostoa välittääksesi työkalulle, joka voi muuntaa sen HTML: ksi. Yksi näistä työkaluista on nimeltään Laajuus. Extent on kätevä työkalu HTML-Raporttien luomiseen nunit XML-tiedostoista.

lataa ensin laajuus samaan hakemistoon kuin NunitReport.aiemmin luotu xml-tiedosto. Suorita seuraavat komennot PowerShell-istunnossa. Nämä komennot luovat hakemiston, johon HTML-tiedostot tallennetaan ja jonka jälkeen suoritetaan laajuus.exe tehdä muuntaminen.

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

kun olet valmis, löydät HTMLReports-hakemistosta kaksi HTML-tiedostoa. Nämä tiedostot näyttää alla kuvakaappauksia avaat ne selaimella.

HTML report for Pester test output
HTML report for Pester test output
HTML report for Pester test output
HTML report for Pester test output

AD Health Check-tulosten syöttäminen PRTG: hen

PRTG on paesslerin kehittämä suosittu seurantatyökalu, jota voit käyttää infrastruktuurisi ja palvelujesi seuraamiseen. Tässä osiossa opit työntämään terveystarkastuksen tulokset PRTG: hen, kun terveystarkastuksen skripti on suoritettu.

tulosten työntäminen PRTG: lle vaatii enemmän työtä kuin työkalunvetotiedot, mutta lopulta huomaat, että asennus on käytetyn ajan arvoinen.

edellytykset

jotta PRTG voidaan ottaa onnistuneesti käyttöön tähän artikkeliin rakennetun ad health check-komentosarjan seurantavälineeksi, varmista, että sinulla on:

  • PRTG asennettu ja konfiguroitu
  • kaikki toimialueen ohjaimet perustettu PRTG
  • Send-Adhcresultoprtg.ps1 PowerShell-skripti ladattu GitHubista
  • y0ur PRTG-anturin URL-osoite ja portti

jos sinulla on kaikki esiraportit valmiina, voit seurata alla olevia vaiheittaisia ohjeita siitä, miten suosittelen työntämään nämä mainosten terveystarkastuksen tulokset PRTG: hen.

  1. luo PRTG: ssä laite nimeltä Domain tai mikä tahansa haluamasi nimi.
  2. luo kehittynyt HTTP-push-anturi, jossa on hakemiston tunniste-adhealthcheck. Huomaa,että tämä on kirjainkoko huomioiva!
  3. luo jokaiselle PRTG: n toimialueen ohjauslaitteelle yksi kehittynyt HTTP-push-anturi. Kunkin IdentityToken, liittää kunkin anturin kanssa-adhealthcheck kuten dc01-adhealthcheck.
  4. lisää Send-Adhcresultoprtg. ps1 PowerShell-komentosarjan sisältö käsittelemämme ADHealthCheck-NoResult. ps1 PowerShell-komentosarjan loppuun.
  5. Vaihda muuttuja $PRTGUrl PRTG-anturin URL-osoitteeseen ja porttiin.
  6. Suorita skripti.

kun AD health check script on valmis, sen pitäisi nyt painaa status PRTG-antureillesi alla esitetyllä tavalla.

PRTG anturit osoittavat AD terveys
PRTG anturit osoittavat AD terveys

Active Directory Health Check Script

Monitoring ad health on jatkuva prosessi. Sinun pitäisi ajaa testejä koko ajan eikä tapauskohtaisia tapauksia. Ajoitetaan Active Directory health check script toimimaan säännöllisin väliajoin.

helpoin reitti näiden tarkistusten automatisointiin on lisätä skripti tehtävien ajoitukseen ja antaa sen toimia mainoksen käyttäjätilin tai ryhmän hallinnoiman palvelutilin alla.

Group Managed Service Accountin (gMSA) käyttäminen on turvallisempi tapa suorittaa ajoitetut tehtävät itsenäisesti, sillä vain määrätyt tietokonetilit voivat hakea salasanan AD: lta. Mutta joillakin järjestöillä ei välttämättä ole tätä ylellisyyttä.

AD: n käyttäjätilin luominen

selvitetään ensin, mitä tarvitaan, jotta AD: n käyttäjätiliä voidaan käyttää suunnitellun tehtävän suorittamiseen.

jos aiot suorittaa ajoitetun tehtävän käyttäjätilinä, älä missään nimessä suorita sitä omana tilinäsi! Luo aina erillinen käyttäjätili tätä tarkoitusta varten.

jos haluat säästää aikaa, näet PowerShell-komentosarjan alla. Tämä on esimerkki skripti voit luoda mainoksen käyttäjätilin, joka on osa Toimialueen järjestelmänvalvojat ryhmä. Tämän jälkeen voit käyttää tätä tiliä ajoitetun tehtävän suorittamiseen.

# 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

Ryhmähallitun palvelutilin luominen

gMSA: n käyttäminen terveystarkastuksen suorittamiseen on hieman hankalampaa, jos et jo käytä gMSA: ta ympäristössäsi, mutta se on paljon turvallisempaa.

KDS-Juuriavaimen luominen

gMSA-tilin luominen AD health check-komentosarjan ajamista varten lisää ensin KDS-juuriavain, jos sinulla ei vielä ole sellaista. Voit tarkistaa, onko sinulla KDS-pääavain, ajamalla PowerShell-komennon Get-KDSRootKey toimialueen ohjaimessa.

jos sinulla ei ole KDS: n pääavainta, luot sellaisen ajamalla Add-KDSRootKey -EffectiveImmediately verkkotunnuksen ylläpitäjien mainosryhmän käyttäjätilin alla 2012r2: lla tai uudemmalla verkkotunnusohjaimella.

avaimen täytyy monistua muille toimialueen ohjaimille, jotta se toimisi täydellä teholla. Lisätietoja tästä prosessista löytyy Microsoftin dokumentaatiosta.

luodaan gMSA

kun KDS-pääavain on luotu, olet valmis luomaan gMSA-tilin Powershellissa. Alla näet esimerkkiskriptin, jolla luodaan gMSA-tili, joka saa todentaa vain Toimialueen järjestelmänvalvojat-ryhmän toimialueen ohjaimesta.

# 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`$"

Gmsa: n asentaminen ja testaaminen

nyt gMSA on luotu, viimeinen vaihe on asentaa ja testata sitä kaikilla toimialueen ohjaimilla. Yksi tapa tehdä tämä on käyttää Invoke-Command PowerShell-komentoa. Alla näet PowerShell-komentosarjan, joka asentaa gMSA: n kaikkiin DCs: ään ja varmistaa, että se toimii oikein.

# 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" }}

antamalla gMSA: lle luvan suorittaa erätyönä

kun gMSA on asennettu, sinun on nyt annettava sille lupa suorittaa erätyönä DCs: ssä. Tili tarvitsee tämän oikeuden, koska se toimii itsenäisesti taustalla ajoitetussa tehtävässä.

voit asettaa tämän oikeuden olemassa olevan ryhmäpoikkeusasetuksen kautta tai luomalla uuden ryhmäpoikkeusasetuksen ja linkittämällä sen toimialueen ohjaimiin. Jos sinulla ei ole jo GPO käyttää, alla on joitakin vaiheita voit luoda yhden.

  1. Käynnistä ryhmäkäytäntöeditori DC: llä.
  2. napsauta hiiren kakkospainikkeella toimialueen ohjaimet OU: ta ja valitse Luo ryhmäkäytäntöobjekti tälle toimialueelle ja linkitä se tähän.
  3. nimeä se DC-kirjautuminen eränä tai muu nimi, jonka haluat
  4. -Napsauta ryhmäkäytäntöobjektia hiiren kakkospainikkeella ja valitse Muokkaa.
  5. siirry tietokoneen kokoonpanoon – > Windowsin asetukset – > suojausasetukset – > käyttöoikeuksien jako.
  6. napsauta hiiren kakkospainikkeella Kirjaudu erätyönä ja valitse Ominaisuudet.
  7. valitse Lisää käyttäjä tai ryhmä.
  8. Napsauta kohdetyypit, valitse vain Palvelutilit ja valitse OK.
  9. Etsi aiemmin luotua svcADHealthCheck-palvelutiliä, valitse se ja napsauta OK.

gMSA: n pitäisi nyt näkyä alla olevan MAINOSLUETTELON alla.

gMSA given rights to logon as a batch work
gMSA given rights to logon as a batch work

ajoitetun tehtävän luominen

nyt kun olet luonut tilin ajoitettujen tehtävien suorittamista varten, voit nyt luoda ajoitetun tehtävän valitsemallasi toimialueen yhdistetyllä palvelimella.

voit luoda ajoitetun tehtävän GUI: n kautta, mutta se on liikaa klikkaamalla! Sen sijaan suosittelen sen luomista Powershellilla. Miksi? Koska voit kopioida koodin näet alla ja tehdä sen kanssa.

alta löytyy kaksi skriptiä; molemmat skriptit ovat samanlaisia, mutta toinen olettaa mainoksen käyttäjätilin ja toinen olettaa gMSA: n. Muista käyttää sopivaa komentosarjaa sen perusteella, mitä tiliä käytät.

# 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

olet mennyttä! Tällä hetkellä ajoitettu tehtävä suoritetaan jollakin yllä olevista skripteistä.

Summary

Whew! Jos olet seurannut koko matkan osa I, sinun pitäisi jo tietää, että AD terveys on syvä aihe. On niin paljon tämä yksi aihe, että ei edes kaksi pitkiä blogikirjoituksia voisi kattaa.

mutta nyt sinulla pitäisi olla tarpeeksi tietoa ja valmiiksi rakennettu PowerShell-kehys, jonka voit liittää muihin Active Directory-terveystarkastuksiin niiden ilmetessä.

lisätietoja

  • joitakin asioita, joita et ehkä tiedä AD: stä ja katastrofien palautuksesta
  • mitä dcdiag oikeastaan … tekee?