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 katalogu. 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
| Metrika | Před | Po 4 týdnech | Zlepšení |
|---|---|---|---|
| Patch compliance | 78 % | 98 % | +20 b. |
| Prům. manuální práce | 4 h/týden | 20 min/týden | ‑92 % |
| Neplánované restart incidenty | 5/rok | 1/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 viaGet-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 -Drainpřed patchováním aStart-ClusterNodepo 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




