PowerShell Health‑Check v 60 s: Jeden skript, co zrentgenuje celý server
Správce: „Jak je na tom SRV‑FILE01?“ — Ty: „Počkej, pustím skript…“ — 60 sekund, a máš PDF, HTML, CSV + notifikaci v Teams, že CPU, RAM, disk, služby i patch level jsou v normě. V tomhle maratonu tě naučím poskládat takový everything‑check skript, nasadit ho do Scheduled Tasku a automaticky ukládat historii do SharePointu. Káva ještě nevychladne a ty už budeš mít hotovo.
1 · Proč mít instantní Health‑Check
- Proaktivita > reaktivita. Víš, že disk C: dosáhne 90 % za 6 dní, dřív než monitoring zapípá.
- Audit & compliance. Někteří auditoři chtějí důkaz, že sleduješ patch level a defender signatury.
- On‑call rychlovka. Posíláš zip logů a report dřív, než L2 vůbec načte RDP.
- Dokumentace. Mít historii výkonu + inventáře = rychlejší capacity planning.
2 · Co má audit měřit
- CPU – průměr, max za 24 h, load per core.
- Paměť – fyzická, pagefile, standby list.
- Disky – volné místo, latence, SMART status.
- Sítě – ztracené pakety, jumbo frame enable?
- Služby – kritické služby běží? (AD, SQL, IIS…)
- Patch level – poslední KB, chybějící aktualizace.
- Event logy – 100 nejkritičtějších za 24 h.
- Antivir – definice aktuální? Realtime ON?
3 · Modul SeidonHealth: instalace
Repozitář PowerShell Gallery. Modul obaluje WMI, Perfmon a UpdateAPI do jednoho cmdletu.
Install-Module -Name SeidonHealth -Repository PSGallery -Scope AllUsers
Ověř, že modul má Authenticode Signature (viz kapitola 9).
4 · Hlavní skript Invoke-SeidonHealth
4.1 One‑liner pro lokální stroj
Invoke-SeidonHealth -OutputPath "C:\Reports" -Verbose
4.2 Skript pro více serverů
param(
[string]$List = "C:\Scripts\servers.txt",
[string]$Out = "\\filesrv\HealthReports"
)
$servers = Get-Content $List
Invoke-Command -ComputerName $servers -ScriptBlock {
param($Out)
Import-Module SeidonHealth
$rep = Invoke-SeidonHealth -OutputPath $env:TEMP
Copy-Item $rep -Destination $Out -Force
} -ArgumentList $Out -AsJob
4.3 Co skript měří (pod kapotou)
Get-Counter '\Processor(_Total)\% Processor Time'Get-WmiObject Win32_LogicalDisk+LatencypomocíDiskSpd(volitelně).Get-WinEvent -FilterHashtable @{LogName='System';Level=2;StartTime=$dayAgo}Get-CimInstance MSFT_MpComputerStatuspro Defender.Get-HotFix | Sort-Object InstalledOn -Descending | Select‑Object -First 1
5 · Generování HTML + CSV reportu
5.1 HTML šablona (TeckStack.PSWriteHTML)
Import-Module PSWriteHTML
New-HTML -Title $env:COMPUTERNAME -Online -FilePath "$path\$env:COMPUTERNAME.html" -Show {
New-HTMLSection -HeaderText "CPU" {
New-HTMLTable -DataTable $data.CPU
}
New-HTMLSection -HeaderText "RAM" { … }
New-HTMLSection -HeaderText "Disks" { … }
}
5.2 CSV pro Power BI
$data | Export-Csv "$path\$env:COMPUTERNAME.csv" -NoTypeInformation -Encoding UTF8
6 · Push notifikace do Teams
$hook = "https://outlook.office.com/webhook/…"
$payload = @{
title = "SeidonHealth ✅ $env:COMPUTERNAME"
text = "CPU: $($data.CPU.Load) % | Disk C:: $($data.Disks.FreePct) % free"
} | ConvertTo-Json
Invoke-RestMethod -Method POST -Uri $hook -Body $payload -ContentType 'application/json'
Barvu karty změníš na červenou, pokud FreePct < 10.
7 · Archivace & trend analytika
- SharePoint Site „HealthReports“ – knihovna s položkami CSV.
- Power BI Dataflow importuje nové CSV denně → dataset ServerHealth.
- Dashboard: Disk trend, Patch Age, Error Rate / Server.
- Retention: 12 měsíců hot, 24 měsíců cold (S3 + GLACIER).
8 · Scheduled Task na klik
$act = New-ScheduledTaskAction -Execute "pwsh" `
-Argument "-File C:\Scripts\SeidonHealth.ps1"
$trg = New-ScheduledTaskTrigger -Daily -At 03:15
Register-ScheduledTask -TaskName "DailyHealth" -Action $act -Trigger $trg `
-User "SYSTEM" -RunLevel Highest
Vyskytují‑li se doménové servery, použij GPO Scheduled Tasks.
9 · Bezpečnost: least privilege & kódový podpis
- Skript běží jako SYSTEM → pozor na exfiltraci logů; cesta jen SMB share s NTFS ACL.
- Modul SeidonHealth je podepsán
CN=Webseidon Code Sign, ExecutionPolicyAllSigned. - Výsledné reporty mají v HTML vložený
Content‑Security‑Policy(žádné externí JS). - CSV může obsahovat PII (uživatelé se zámkem); maskuj změnou parametru
-AnonymizeUsers.
10 · Case study: 40 serverů, 5 minut denně
| Metrika | Před skriptem | Po nasazení | Zlepšení |
|---|---|---|---|
| Čas inventury HW | 2 h/měsíc | 0 h | ‑100 % |
| Neoček. výpadky kvůli disku | 3/rok | 0/rok | ‑100 % |
| Helpdesk tikety „server pomalý“ | 15/měsíc | 4/měsíc | ‑73 % |
| Patch compliance | 78 % | 96 % | +18 bodů |
ROI: 1 h skriptování, úspora 10 h man‑práce měsíčně → návrat < 1 týden.
11 · FAQ
- Nebude 60 s málo pro perf countery?
- Sampling je 5 s × 12; pro trend sleduj průměr. Na dlouhodobý výkon použij PerfMon DBS.
- Proč ne SCom / Zabbix?
- Zabbix dělá to samé 24×7, ale skript je lehčí, offline a portable – hodí se pro ad‑hoc audit nebo DMZ, kde agent nechceš.
- Můžu přidat Linux?
- SeidonHealth je Windows‑only. Pro Linux udělej bash wrapper s
sar,smartctla pošli JSON do stejné pipeline.
12 · Závěr
Jedním skriptem, jednou minutou a jedním Scheduled Taskem získáš rentgen serveru, který mluví jasnou řečí čísel. Žádné divoké klikaní v MMC, žádné zmatené screenshoty. Až se šéf zeptá „Co je s tím serverem?“, pošleš mu HTML s grafem a on už nikdy nebude chtít slyšet „musím se přihlásit a podívat“. Tak co, ještě pořád si myslíš, že PowerShell je jen pro geeky?
Klíčová slova
powershell health check, server audit, windows monitoring, csv export, html report, performance counter, wmi query, scheduled task, sysadmin toolkit, automatizace




