Adam Automator

Toto je část II dvoudílné série o kontrolách stavu služby Active Directory. I když to není povinná četba, pokud byste se chtěli dozvědět, jak na PowerShell skript, budete se učit v tomto článku byl postaven, jste vyzývají, aby podívejte se na Budování Active Directory Zdraví, Zkontrolujte Nástroj : Část I.

V Části I, jste se naučili, jak mnoho různých více testů a proč jsou důležité. Pojďme je všechny dohromady a postavit nástroj. V této části převedete všechny kontroly stavu služby Active Directory vysvětlené v části I na testovací rámec. Dozvíte se také, jak na výstup výsledky různých ad zdravotní kontroly na nástroje, jako je Pester a monitorovací nástroj s názvem PRTG.

sledovat spolu, nebo vidět finální verzi nástroje, budete se dozvíte v tomto článku, ke stažení ADHealthCheck-NoResult.ps1 skript z GitHub.

Obsah

Definování Výstupu

Mají společný typ objektu a snadný způsob, jak generovat to bude dělat to mnohem jednodušší převést výsledky do nástroje výběr.

pro vytvoření jednotného výstupu pro všechny potenciální nástroje jsem se rozhodl použít třídu PowerShell. I když to není nutné, je to přístup, který jsem se rozhodl vzít zde. Hlavním bodem je zajistit, aby všechny kontroly stavu reklam vrátily stejný typ výstupu.

Třída PowerShell je schéma, které definuje, jak by měl objekt PowerShell vypadat a co by měl dělat. Každý řádek, který vidíte níže, představuje vlastnost, kterou bude mít návrat objektů. Níže vidíte, že plánuji každou kontrolu stavu reklamy, abych vrátil deset nemovitostí.

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

Chcete-li urychlit tuto tvorbu třídy, budu používat pomocnou funkci nazvanou New-AdhcResult. Tato funkce vytvoří třídu a vše, co budete muset následovat. Tato funkce vypíše vlastní objekt typu .

spuštění nástroje pro kontrolu stavu reklam

nejprve stáhněte a zkopírujte skript pro kontrolu stavu reklam do řadiče domény. Otevřete jej pomocí PowerShell ISE a spusťte jej. Tato část nástroje nevrátí žádné informace.

Ths skript spustí a uloží výsledek každé kontroly v proměnné $TestResults jako více objektů . Tyto objekty budete později používat pro generování sestav nebo jejich výstup do různých nástrojů. Podržením výsledků kontroly stavu v proměnné, jako je tato, můžete přidat další výsledky, pokud se rozhodnete vytvořit další a použít příkaz New-AdHcResult.

po dokončení spuštění skriptu byste nyní měli mít v proměnné $TestResults uloženou kompletní sadu objektů kontroly stavu reklam. Nyní můžete z konzoly Spustit $TestResults a zobrazit výsledky raw.

zobrazení výsledků kontroly stavu reklam v nástrojích

vzhledem k tomu, že všechny kontroly jsou ve společném typu objektu, můžete je lépe zkontrolovat pomocí několika nástrojů, jako jsou Pester a PRTG.

v této části se dozvíte, jak vytvořit HTML sestavu pomocí nástroje nazvaného rozsah a zobrazit sestavu v PRTG.

vytvoření souboru NUnit XML s Pesterem

nejprve musíte převést objekty PowerShell ve formátu, kterému vaše nástroje rozumějí. Většina nástrojů rozumí XML nebo konkrétněji NUnit XML. Jedná se o formát, který můžete importovat do různých nástrojů pro zobrazení výsledků.

Vzhledem k tomu, že pracujete s PowerShell, budete používat Otravovat testování rámec číst výstup z AD health check script a generovat nUnit XML souboru

Začněte stažením nejnovější verze Otravovat. Pester si můžete stáhnout spuštěním Install-Module ve zvýšené konzole PowerShell. Níže uvedený příkaz vynutí instalaci nejnovější verze Pester. Vzhledem k tomu, že certifikát vydavatele, s nímž je Pester podepsán, je dodáván se systémem Windows 10, musíme jej nainstalovat pomocí parametru SkipPublisherCheck.

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

jakmile je k dispozici Pester, můžete spustit skript a dynamicky vytvořit sadu testů Pester.

Poznámka: Můžete také vytvořit testy sami bez použití skriptu PowerShell, který jsem poskytl.

níže uvedený skript PowerShell použije Pester ke generování souboru NUnit XML z výstupu proměnné $TestResults definované ve skriptu ADHealthCheck-NoResult.ps1.

Uložte tento soubor jako Pester. ps1 ve stejné složce jako skript pro kontrolu stavu reklam.

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

nakonec spusťte Invoke-Pester níže a vyvoláte Pester.soubor ps1 a výsledky uložte ve formátu NUnitXml.

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

vytváření sestavy HTML pomocí nástroje rozsah

jakmile máte soubor NUnit XML, můžete nyní tento soubor použít k předání nástroji, který jej může převést na HTML. Jeden z těchto nástrojů se nazývá rozsah. Rozsah je užitečný nástroj pro vytváření zpráv HTML ze souborů NUnit XML.

nejprve stáhněte rozsah do stejného adresáře jako NunitReport.xml soubor vytvořený dříve. Poté proveďte následující příkazy v relaci PowerShell. Tyto příkazy vytvoří adresář pro uložení souborů HTML a poté provedou rozsah.exe provést konverzi.

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

po dokončení najdete dva soubory HTML v adresáři HTMLReports. Tyto soubory budou vypadat jako níže uvedené snímky obrazovky, které je otevřete pomocí webového prohlížeče.

zpráva HTML pro Otravovat testovací výstup
HTML zprávy pro Otravovat testovací výstup
zpráva HTML pro Otravovat testovací výstup
HTML zprávy pro Otravovat testovací výstup

Požitím AD Zdravotní prohlídky Výsledky do PRTG

PRTG je populární nástroj pro monitorování vyvinut Paessler, které můžete použít ke sledování vaší infrastruktury a služeb. V této části se dozvíte, jak posunout výsledky kontroly stavu na PRTG po spuštění skriptu kontroly stavu.

tlačení výsledků na PRTG vyžaduje více práce než mít informace o tahu nástroje, ale nakonec uvidíte, že nastavení stojí za čas strávený.

Předpoklady

, Aby se úspěšně nastavit PRTG jako monitorovací nástroj pro AD health check script postaven v tomto článku, ujistěte se, že máte:

  • PRTG nainstalován a nakonfigurován
  • Všechny řadiče domény nastavit v PRTG
  • Odeslat-AdhcResultToPrtg.ps1 PowerShell skript stažený z GitHub
  • URL a port snímače Y0UR PRTG

pokud máte všechny prereqs hotové, můžete postupovat podle níže uvedených pokynů krok za krokem, jak doporučuji posunout tyto výsledky kontroly stavu reklamy na PRTG.

  1. Vytvořte zařízení v PRTG s názvem doména nebo jakýkoli název, který preferujete.
  2. Vytvořte pokročilý HTTP push senzor s IdentityToken adresáře-adhealthcheck. Všimněte si, že toto je malá a velká písmena!
  3. pro každé zařízení řadiče domény v PRTG vytvořte jeden pokročilý HTTP push senzor. Pro každou IdentityToken, připojit každý senzor s-adhealthcheck, jako je dc01-adhealthcheck.
  4. přidejte obsah skriptu send-AdhcResultToPrtg.ps1 PowerShell na konec skriptu Adhealthcheck-NoResult.ps1 PowerShell, který jsme pokryli.
  5. změňte proměnnou $PRTGUrl na adresu URL a port senzoru PRTG.
  6. spusťte skript.

po dokončení, po dokončení skriptu kontroly stavu reklamy, by nyní měl tlačit stav na vaše senzory PRTG, jak je uvedeno níže.

PRTG senzory zobrazující REKLAMNÍ zdraví
PRTG senzory zobrazující REKLAMNÍ zdraví

Plánování služby Active Directory Health Check Script

Sledování AD zdraví je probíhající proces. Měli byste spouštět testy po celou dobu, spíše než ad-hoc instance. Pojďme naplánovat Active Directory kontrola stavu skript spustit v častých intervalech.

nejjednodušší cestou automatizace těchto kontrol je přidání skriptu do Plánovače úloh a jeho spuštění pod Uživatelským účtem reklamy nebo účet služby spravované skupinou.

použití účtu skupiny spravované služby (gMSA) je bezpečnější způsob provádění naplánovaných úkolů autonomně, protože pouze zadané počítačové účty, které mohou načíst heslo z AD. Ale některé organizace nemusí mít tento luxus.

Vytvoření uživatelského účtu reklamy

nejprve si rozeberme, co je zapotřebí k nastavení uživatelského účtu reklamy pro spuštění naplánované úlohy.

pokud se chystáte spustit naplánovanou úlohu jako uživatelský účet, v žádném případě jej nespouštějte jako svůj vlastní účet! Pro tento účel si vždy vytvořte samostatný uživatelský účet.

Chcete-li ušetřit čas, uvidíte níže uvedený skript PowerShell. Toto je příklad skriptu, který můžete použít k vytvoření uživatelského účtu reklamy, který je součástí skupiny Domain Admins. Tento účet pak můžete použít ke spuštění naplánované úlohy.

# 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

vytvoření účtu služby spravované skupinou

použití gMSA ke spuštění kontroly stavu je o něco složitější, pokud již nepoužíváte gMSA ve svém prostředí, ale je to mnohem bezpečnější.

Vytvořit Kořenový Klíč KDS

vytvořit účet gMSA spustit AD kontrola zdraví skript, nejprve přidat kořenový klíč KDS, pokud nemáte jeden již. Můžete zkontrolovat, zda máte kořenový klíč KDS spuštěním příkazu PowerShell Get-KDSRootKey na řadiči domény.

pokud nemáte kořenový klíč KDS, vytvoříte jej spuštěním Add-KDSRootKey -EffectiveImmediately pod Uživatelským účtem části reklamní skupiny Domain Admins na řadiči domény 2012R2 nebo novějším.

klíč se musí replikovat na ostatní řadiče domény, aby se plně projevil. Více informací o tomto procesu naleznete v dokumentaci společnosti Microsoft.

vytvoření gMSA

jakmile je vytvořen kořenový klíč KDS, jste připraveni vytvořit účet gMSA pomocí PowerShell. Níže vidíte příklad skriptu, který chcete použít k vytvoření účtu gMSA, který může být ověřen pouze z řadiče domény ve skupině Domain Admins.

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

instalace a testování gMSA

nyní je gMSA vytvořena, posledním krokem je instalace a testování na všech řadičích domény. Jedním ze způsobů, jak toho dosáhnout, je použití příkazu Invoke-Command PowerShell. Níže vidíte skript PowerShell, který nainstaluje gMSA na všechny DCs a zajistí, že funguje správně.

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

udělení oprávnění gMSA ke spuštění jako dávkové úlohy

jakmile je gMSA nainstalována, musíte jí nyní udělit oprávnění ke spuštění jako dávkové úlohy na DCs. Účet potřebuje toto právo, protože bude spuštěn autonomně na pozadí v naplánované úloze.

toto oprávnění můžete nastavit pomocí existujícího GPO nebo vytvořením nového GPO a jeho propojením s řadiči domény ou. Pokud ještě nemáte GPO k použití, níže jsou uvedeny některé kroky, které můžete podniknout k vytvoření.

  1. spusťte Editor zásad skupiny na DC.
  2. klepněte pravým tlačítkem myši na řadiče domény OU a vyberte Vytvořit GPO v této doméně a propojte ji zde.
  3. pojmenujte jej DC-Logon jako dávku nebo jiný název, který preferujete
  4. klepněte pravým tlačítkem myši na GPO a klikněte na Upravit.
  5. Přejděte na Konfigurace Počítače –> Nastavení systému Windows –> Nastavení Zabezpečení –> Přiřazení Uživatelských práv.
  6. klikněte levým tlačítkem myši Přihlásit se jako dávková úloha a klikněte na Vlastnosti.
  7. klikněte na Přidat uživatele nebo skupinu.
  8. klikněte na typy objektů, vyberte pouze účty služeb a klikněte na OK.
  9. vyhledejte dříve vytvořený účet služby svcADHealthCheck, vyberte jej a klikněte na OK.

nyní byste měli vidět gMSA pod seznamem reklamních objektů, jak je uvedeno níže.

gMSA dané práva přihlásit jako dávkovou úlohu
gMSA dané práva přihlásit jako dávkovou úlohu

Vytvoření Naplánované Úlohy

Teď, že máte účet vytvořen ke spuštění naplánované úlohy, můžete nyní vytvořit naplánované úlohy sám na doméně serveru vašeho výběru.

naplánovanou úlohu můžete vytvořit pomocí GUI, ale to je příliš mnoho kliknutí! Místo toho doporučuji vytvořit jej pomocí PowerShell. Proč? Protože můžete jednoduše zkopírovat kód, který vidíte níže, a udělat s ním.

níže naleznete dva skripty; oba skripty jsou podobné, ale jeden předpokládá uživatelský účet reklamy a druhý předpokládá gMSA. Nezapomeňte použít příslušný skript na základě toho, který účet používáte.

# 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

skončil jsi! V tuto chvíli se naplánovaná úloha spustí v intervalu uvedeném v jednom z výše uvedených skriptů.

Souhrn

Whew! Pokud jste sledovali celou cestu od části I, měli byste vědět, že zdraví reklamy je hlubokým tématem. K tomuto jednomu tématu je toho tolik, že ani dva zdlouhavé příspěvky na blogu nemohly pokrýt.

ale nyní byste měli mít dostatek znalostí a předem postavený rámec PowerShell, který můžete připojit k dalším kontrolám stavu služby Active Directory, jakmile nastanou.

další čtení

  • některé věci, které možná nevíte o AD a Disaster Recovery
  • co vlastně DCDIAG dělá?