Z 0 na 100 %: Automatický patch management přes PSWindowsUpdate webseidon Lukáš Adámek

Z 0 na 100 %: Automatický patch management přes PSWindowsUpdate

Z 0 na 100 %: Automatický patch management přes PSWindowsUpdate

Z 0 na 100 %: Automatický patch management přes PSWindowsUpdate

Manuální klikání v „Windows Update“ je peklo už na jednom PC, natož na farmě 50 serverů. WSUS je fajn, ale vyžaduje SQL, IIS a tunu údržby. Řešení? PSWindowsUpdate – modul, který zvládne stáhnout, nainstalovat, restartovat, zalogovat a nahlásit záplaty za tebe. V tomhle článku nastavíme kompletní autopatch: od instalace modulu přes Teams report až po checkpoint rollback, kdyby se něco zkazilo.



1 · Proč zrovna PSWindowsUpdate

  • Žádná infrastruktura. Stačí Internet + PowerShell ≥5.1 (na Core serverech taky).
  • Granularita. Můžeš instalovat jen security, jen defender, jen preview, cokoliv.
  • Script friendly. Cmdlety vracejí objekty → snadno export CSV/JSON.
  • Podpora offline katalo­gu. Umí načíst MSU cab přes UNC.
  • Reboot management. Restartuj hned, odlož, nebo vůbec.

2 · Instalace modulu a příprava

2.1 Instalace z PowerShell Gallery

Install-Module -Name PSWindowsUpdate -Repository PSGallery -Force

Na serverech bez internetového přístupu: Save-Module na offline stroj, pak kopie.

2.2 Nastavení Execution Policy

Set-ExecutionPolicy RemoteSigned -Scope LocalMachine

2.3 Přidání cmdletů do session

Add-WUServiceManager -MicrosoftUpdate – zajistí, že získáš Office/Defender patche.


3 · Vytvoření baseline – co je nainstalováno?

Get-WUHistory | Sort-Object Date -Descending |
  Select-Object -First 20 | Format-Table Date, KB, Result

Ulož jako CSV:

Get-WUHistory | Export-Csv C:\PatchBaseline\SRV01_history.csv -NoTypeInformation

4 · Politika: co instalovat, co skrýt

  • Security-Only měsíční balíčky: -Classification SecurityUpdates
  • Skip driver updates: -NotCategory Drivers
  • Hide preview KB: Hide-WUUpdate -KBArticleID KB5021234

5 · Hlavní skript Invoke-AutoPatch.ps1

param(
  [switch]$Silent,
  [switch]$NoReboot,
  [string]$TeamsWebhook
)

Import-Module PSWindowsUpdate

$log = "C:\PatchLogs\$(hostname)_$(Get-Date -F yyyy-MM-dd_HH-mm).txt"

$updates = Get-WindowsUpdate -MicrosoftUpdate `
           -Category 'SecurityUpdates','CriticalUpdates','DefinitionUpdates' `
           -AcceptAll -IgnoreReboot -ErrorAction SilentlyContinue

if ($updates) {
    Install-WindowsUpdate -Updates $updates -AcceptAll -IgnoreReboot -Verbose |
      Tee-Object -FilePath $log
    if (!$NoReboot) { Restart-Computer -Force }
    $msg = "🔄 $(hostname) nainstaloval $($updates.Count) aktualizací."
} else {
    $msg = "✅ $(hostname) je aktuální."
}

if ($TeamsWebhook) {
   Invoke-RestMethod -Uri $TeamsWebhook -Method Post -Body (@{
       title = "Patch report $(hostname)"
       text  = $msg
   } | ConvertTo-Json) -ContentType 'application/json'
}

if (!$Silent) { Write-Host $msg -ForegroundColor Green }

6 · Scheduled Task & údržbové okno

$A = New-ScheduledTaskAction -Execute 'pwsh' `
     -Argument '-File C:\Scripts\Invoke-AutoPatch.ps1 -TeamsWebhook https://…'
$T = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Sunday -At 03:00
Register-ScheduledTask -TaskName 'AutoPatch' -Action $A -Trigger $T `
   -User 'SYSTEM' -RunLevel Highest

Pro WS pool použij Group Policy Preference.


7 · Report do Teams / e‑mail

Webhook JSON viz kapitola 5. Pro e‑mail:

Send-MailMessage -SmtpServer smtp.firma.cz -To it@firma.cz -From patchbot@… `
 -Subject "Patch report $(hostname)" -Body (Get-Content $log -Raw)

8 · Checkpoint & automatický rollback

Checkpoint-Computer -Description "PrePatch" -RestorePointType 0
Install-WindowsUpdate …
if ($LASTEXITCODE -ne 0) {
   Restore-Computer -RestorePoint 0
}

Na Hyper‑V VM raději použij Checkpoint-VM.


9 · Spuštění na fleetu serverů přes PSRemoting

$servers = Get-Content .\prod_servers.txt
Invoke-Command -ComputerName $servers -FilePath C:\Scripts\Invoke-AutoPatch.ps1 `
   -ArgumentList '-Silent','-NoReboot','-TeamsWebhook https://…' -ThrottleLimit 10

Restart proveď ve druhé vlně, aby nespadl cluster.


10 · Case study: od 78 % na 98 % compliance

MetrikaPředPo 4 týdnechZlepšení
Patch compliance78 %98 %+20 b.
Prům. manuální práce4 h/týden20 min/týden‑92 %
Neplánované restart incidenty5/rok1/rok‑80 %

11 · Bezpečnost & auditorské logy

  • PSWindowsUpdate ukládá log do C:\Windows\Logs\WindowsUpdate. Archivuj 365 dní.
  • Task běží jako SYSTEM → izoluj skript cestu, NTFS ACL jen Admins.
  • Signuj skript vlastní Code‑Sign certifikátem, ExecutionPolicy AllSigned.
  • Teams Webhook token drž v Credential Manager, načti via Get-StoredCredential.

12 · FAQ

Mohu ručně schválit jen některé KB?
Použij -Download-Title '2025-04 Cumulative', zkontroluj, poté Install-WindowsUpdate -KBArticleID KB5031234.
Co ovladače (drivers)?
Výchozí cmdlet je přeskakuje. Přidej -Category Drivers, ale testuj offline.
Restart přes cluster?
Na failover clusteru spusť Stop-ClusterNode -Drain před patchováním a Start-ClusterNode po rebootu.

13 · Závěr

PSWindowsUpdate promění chaotické záplatování na automatizovaný, auditovatelný a bezpečný proces. Za pár řádků skriptu máš klidné noci, méně ticketů a šťastného manažera compliance. Tak proč ještě klikáš na „Vyhledat aktualizace“ ručně?


Klíčová slova

pswindowsupdate, patch management, windows update powershell, automatické aktualizace, scheduled task updates, server reboot control, update compliance

↥ Zpět nahoru

Sdílejte na sítích

Webseidon
Webseidon
Articles: 32