PowerShell Health‑Check v 60 s: Jeden skript, co zrentgenuje celý server webseidon Lukáš Adámek Odry Fulnek Vítkov Klokočov webdesignér webdeveloper

PowerShell Health‑Check v 60 s: Jeden skript, co zrentgenuje celý server

PowerShell Health‑Check v 60 s: Jeden skript, co zrentgenuje celý server

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

  1. CPU – průměr, max za 24 h, load per core.
  2. Paměť – fyzická, pagefile, standby list.
  3. Disky – volné místo, latence, SMART status.
  4. Sítě – ztracené pakety, jumbo frame enable?
  5. Služby – kritické služby běží? (AD, SQL, IIS…)
  6. Patch level – poslední KB, chybějící aktualizace.
  7. Event logy – 100 nejkritičtějších za 24 h.
  8. 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 + Latency pomocí DiskSpd (volitelně).
  • Get-WinEvent -FilterHashtable @{LogName='System';Level=2;StartTime=$dayAgo}
  • Get-CimInstance MSFT_MpComputerStatus pro 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

  1. SharePoint Site „HealthReports“ – knihovna s položkami CSV.
  2. Power BI Dataflow importuje nové CSV denně → dataset ServerHealth.
  3. Dashboard: Disk trend, Patch Age, Error Rate / Server.
  4. 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, ExecutionPolicy AllSigned.
  • 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ě

MetrikaPřed skriptemPo nasazeníZlepšení
Čas inventury HW2 h/měsíc0 h‑100 %
Neoček. výpadky kvůli disku3/rok0/rok‑100 %
Helpdesk tikety „server pomalý“15/měsíc4/měsíc‑73 %
Patch compliance78 %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, smartctl a 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

↥ Zpět nahoru

Sdílejte na sítích

Webseidon
Webseidon
Articles: 32