Tags: WSUS · Patches · Windows Update · Patch Management · GPO · Windows Server 2025
Por Duarte Spínola · 5 de Julho de 2026
WSUS: Gestão de Patches no Windows Server 2025 em 2026
O WSUS (Windows Server Update Services) permite gerir a distribuição de updates Windows numa rede corporativa. Em vez de cada máquina ir ao Windows Update da Microsoft, o WSUS descarrega os updates uma vez e distribui localmente. Este guia cobre instalação, configuração, aprovação, GPO, manutenção e troubleshooting, com base na documentação oficial.
Para complementar, consulta os artigos sobre Corrigir Windows Update Corrupto, Windows Server 2025, PowerShell 7, Windows Admin Center e Registar Tickets.
Conteúdos
- 1. Instalar WSUS no Windows Server 2025
- 2. Configurar Produtos e Classificações
- 3. Grupos de Computadores
- 4. Aprovação de Updates
- 5. Configurar GPO para WSUS
- 6. Manutenção do WSUS
- 7. Gerir WSUS com PowerShell
- 8. WSUS vs Intune Update Policies
- 9. Performance e SQL Server
- 10. Cenário Prático PME
- 11. Problemas Comuns
- 12. Boas Práticas de Patching
- 13. Checklist de Implementação
1. Instalar WSUS no Windows Server 2025
# Instalar WSUS via PowerShell
Install-WindowsFeature -Name WSUS -IncludeManagementTools
# Configurar directório para updates (mínimo 30GB)
# Durante a instalação, especificar:
# D:\WSUS (recomendado em disco separado do sistema)
# Se usar SQL Server em vez de WID (Windows Internal Database)
Install-WindowsFeature -Name WSUS -IncludeManagementTools -SqlInstance "SQL01\WSUS"
# Após instalação, correr o assistente de configuração:
# Server Manager > Tools > Windows Server Update Services
# 1. Seleccionar WID ou SQL Server
# 2. Definir directório de updates
# 3. Escolher sync source: Microsoft Update ou upstream WSUS
# 4. Escolher idiomas (Português + Inglês)
# 5. Escolher produtos e classificações
# 6. Sync schedule: manual ou automática
# Verificar instalação
Get-WindowsFeature -Name WSUS
Get-Service -Name WSUSService, W3SVC | Select-Object Name, Status, StartType
2. Configurar Produtos e Classificações
# Conectar ao WSUS via PowerShell
$wsus = Get-WsusServer -Name wsus01 -PortNumber 8530
# Listar produtos disponíveis
$wsus.GetSubscription().GetUpdateClassifications() | Select-Object Title
# Configurar produtos (exemplo PME)
$products = @(
"Windows Server 2025",
"Windows 11",
"Microsoft 365 Apps",
"Microsoft Edge",
"SQL Server 2022",
"Microsoft Defender"
)
# Configurar classificações
$classifications = @(
"Critical Updates",
"Security Updates",
"Update Rollups",
"Updates",
"Definition Updates",
"Drivers"
)
# No WSUS Console:
# Options > Products and Classifications
# Seleccionar apenas o necessário — menos produtos = menos espaço = mais rápido
# Sincronizar pela primeira vez
$wsus.GetSubscription().StartSynchronization()
# Verificar estado da sincronização
$wsus.GetSubscription().GetSynchronizationStatus()
$wsus.GetSubscription().GetLastSynchronizationInfo()
3. Grupos de Computadores
# Criar grupos de computadores para deploy faseado
$wsus = Get-WsusServer -Name wsus01 -PortNumber 8530
# Criar grupos
$wsus.CreateComputerTargetGroup("Piloto - Windows 11")
$wsus.CreateComputerTargetGroup("Producao - Windows 11")
$wsus.CreateComputerTargetGroup("Servidores - Windows Server 2025")
$wsus.CreateComputerTargetGroup("Servidores - SQL")
# Verificar grupos
$wsus.GetComputerTargetGroups() | Select-Object Name, Id
# No GPO: configurar targeting de grupos
# Computer Configuration > Policies > Administrative Templates >
# Windows Components > Windows Update > Enable client-side targeting
# Target group name: "Piloto - Windows 11"
# Os computadores aparecem automaticamente no grupo
# conforme o GPO aplicado
4. Aprovação de Updates
# Aprovar updates via PowerShell
$wsus = Get-WsusServer -Name wsus01 -PortNumber 8530
$grupoPiloto = $wsus.GetComputerTargetGroups() | Where-Object { $_.Name -eq "Piloto - Windows 11" }
$grupoProd = $wsus.GetComputerTargetGroups() | Where-Object { $_.Name -eq "Producao - Windows 11" }
# Obter updates de segurança não aprovados
$updates = $wsus.GetUpdates() | Where-Object {
$_.IsApproved -eq $false -and
$_.UpdateClassificationTitle -eq "Security Updates"
}
# Aprovar para piloto (install)
foreach ($update in $updates) {
$update.ApproveForComputerTargetGroup($grupoPiloto)
Write-Output "Aprovado: $($update.Title)"
}
# Aprovar com deadline (instalação obrigatória em 7 dias)
$deadline = (Get-Date).AddDays(7)
foreach ($update in $updates) {
$update.ApproveForComputerTargetGroup($grupoProd, $deadline)
}
# Declinar updates não necessários
$updatesNaoNecessarios = $wsus.GetUpdates() | Where-Object {
$_.UpdateClassificationTitle -eq "Drivers" -and $_.IsDeclined -eq $false
}
foreach ($update in $updatesNaoNecessarios) {
$update.Decline()
}
# Verificar estado de aprovação
$wsus.GetUpdates() | Where-Object { $_.IsApproved } |
Select-Object Title, UpdateClassificationTitle, @{N="AprovadoPara";E={$_.GetUpdateApprovals().ComputerTargetGroupId}} |
Format-Table -AutoSize
5. Configurar GPO para WSUS
# GPO: WSUS Configuration
# Computer Configuration > Policies > Administrative Templates >
# Windows Components > Windows Update
# Configurações recomendadas:
# 1. Configure Automatic Updates = Enabled
# - 4 = Auto download and schedule the install
# - Schedule: Every Friday at 22:00
# 2. Specify intranet Microsoft update service location = Enabled
# - Set the intranet update service for detecting updates: http://wsus01:8530
# - Set the intranet statistics server: http://wsus01:8530
# 3. Enable client-side targeting = Enabled
# - Target group name: "Producao - Windows 11"
# 4. Automatic Updates detection frequency = Enabled
# - Check for updates every 4 hours
# 5. No auto-restart with logged-on users = Enabled
# (Não reiniciar se alguém estiver a usar o computador)
# 6. Reschedule Windows Update installations = Enabled
# - Wait 5 minutes after startup before rescheduling
# 7. Allow Automatic Updates immediate installation = Enabled
# (Instala updates que não requerem reinício imediatamente)
# Verificar aplicação do GPO no cliente
gpupdate /force
gpresult /h C:\Temp\gpo_report.html
# Verificar configuração WSUS no cliente
reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate"
# Deve mostrar: WUServer=http://wsus01:8530
# TargetGroupEnabled=1
# TargetGroup=Producao - Windows 11
6. Manutenção do WSUS
# Manutenção mensal do WSUS (evita base de dados inflada)
# 1. Declinar updates substituídos (superseded)
$wsus = Get-WsusServer -Name wsus01 -PortNumber 8530
$superseded = $wsus.GetUpdates() | Where-Object {
$_.IsSuperseded -and -not $_.IsDeclined
}
foreach ($update in $superseded) {
$update.Decline()
}
Write-Output "Declinados $($superseded.Count) updates substituídos"
# 2. Declinar updates de produtos não usados
# (ex: Windows 7, Office 2013 se não estão no inventário)
# 3. Correr cleanup wizard via PowerShell
Invoke-WsusServerCleanup -UpdateServer $wsus `
-CleanupObsoleteUpdates `
-CleanupUnneededContentFiles `
-CompressUpdates `
-DeclineExpiredUpdates `
-DeclineSupersededUpdates
# 4. Agendar cleanup mensal via Task Scheduler
$action = New-ScheduledTaskAction -Execute "powershell.exe" `
-Argument "-Command `"Invoke-WsusServerCleanup -UpdateServer wsus01 -PortNumber 8530 -CleanupObsoleteUpdates -CleanupUnneededContentFiles -DeclineSupersededUpdates`""
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Sunday -At 02:00
Register-ScheduledTask -TaskName "WSUS-Monthly-Cleanup" -Action $action -Trigger $trigger -RunLevel Highest
# 5. Reindexar base de dados (SQL Server)
# Se usar SQL Server, reindexar mensalmente:
sqlcmd -S SQL01\WSUS -d SUSDB -Q "EXEC sp_MSforeachtable 'DBCC DBREINDEX('?')'"
# 6. Verificar tamanho da base de dados
sqlcmd -S SQL01\WSUS -d SUSDB -Q "SELECT SUM(reserved_page_count) * 8.0 / 1024 AS SizeMB FROM sys.dm_db_partition_stats"
7. Gerir WSUS com PowerShell
# Relatório de updates aprovados por grupo
$wsus = Get-WsusServer -Name wsus01 -PortNumber 8530
$grupos = $wsus.GetComputerTargetGroups()
foreach ($grupo in $grupos) {
$aprovados = $wsus.GetUpdates() | Where-Object {
$_.GetUpdateApprovals() | Where-Object { $_.ComputerTargetGroupId -eq $grupo.Id }
}
Write-Output "$($grupo.Name): $($aprovados.Count) updates aprovados"
}
# Relatório de conformidade por computador
$computers = $wsus.GetComputerTargets()
foreach ($computer in $computers) {
$status = $computer.GetUpdateInstallationInfoPerUpdate()
$instalados = ($status | Where-Object { $_.UpdateInstallationState -eq "Installed" }).Count
$pendentes = ($status | Where-Object { $_.UpdateInstallationState -eq "NotInstalled" -and $_.UpdateApprovalAction -eq "Install" }).Count
$falhados = ($status | Where-Object { $_.UpdateInstallationState -eq "Failed" }).Count
[PSCustomObject]@{
Computer = $computer.FullDomainName
Instalados = $instalados
Pendentes = $pendentes
Falhados = $falhados
}
} | Format-Table -AutoSize
# Forçar sincronização
$wsus.GetSubscription().StartSynchronization()
# Verificar últimos updates sincronizados
$wsus.GetUpdates() | Sort-Object ArrivalDate -Descending |
Select-Object -First 20 Title, ArrivalDate, UpdateClassificationTitle |
Format-Table -AutoSize
8. WSUS vs Intune Update Policies
| Característica | WSUS | Intune Update Policies |
|---|---|---|
| On-premise | Sim | Não |
| Cloud | Não | Sim |
| Aprovação granular | Sim (update a update) | Limitada (rings) |
| Relatórios | Detalhados | Básicos |
| Manutenção | Alta (SQL, cleanup) | Baixa (gerido pela MS) |
| Largura de banda | Economiza (download único) | Cada dispositivo faz download |
| Custo | Gratuito (com Windows Server) | Incluído no Intune |
9. Performance e SQL Server
⚠ Nota: O WSUS com WID (Windows Internal Database) funciona bem para PMEs até ~200 computadores. Para ambientes maiores, migrar para SQL Server dedicado melhora significativamente a performance.
# Verificar tamanho da base de dados WID
# WID está em: C:\Windows\WID\Data\SUSDB.mdf
Get-ChildItem "C:\Windows\WID\Data\SUSDB.mdf" | Select-Object Name, @{N="SizeMB";E={[math]::Round($_.Length/1MB,2)}}
# Se SUSDB > 10GB, considerar migração para SQL Server
# ou cleanup agressivo
# Otimizações:
# 1. Disco separado para updates (D:\WSUS)
# 2. Disco separado para base de dados (SSD)
# 3. IIS: aumentar connection timeout
# 4. Configurar BITS (Background Intelligent Transfer Service)
# para optimizar transferência
# Configurar BITS no WSUS
# WSUS Console > Options > Update Files and Languages
# - Download update files to this server only when updates are approved
# - Do not download Express Installation Files (poupa espaço)
# - Maximum of BITS download jobs: 10
10. Cenário Prático PME
# PME com 50 computadores (40 Windows 11 + 10 Windows Server 2025)
# + 5 servidores SQL
# Topologia:
# - 1 servidor WSUS (Windows Server 2025, 16GB RAM, 200GB disco)
# - WID (não precisa SQL Server para 50 computadores)
# - Sync automático: diário às 03:00
# - Aprovação: manual para servidores, automática para workstations
# Grupos:
# 1. Piloto-W11 (5 PCs) — aprovar e instalar Sexta-feira
# 2. Producao-W11 (35 PCs) — aprovar e instalar Segunda-feira seguinte
# 3. Servidores-WS2025 (10 servers) — aprovar manualmente, install janela
# 4. Servidores-SQL (5 servers) — aprovar manualmente, testar primeiro
# GPO:
# - Workstations: auto-download + schedule install (Sexta 22h)
# - Servidores: auto-download + notify for install
# - No auto-restart with logged-on users = Enabled
# Schedule:
# - Sexta 03:00: sync automático
# - Sexta 09:00: rever novos updates, aprovar para Piloto
# - Segunda 09:00: se Piloto OK, aprovar para Produção
# - Terça: aprovar para Servidores (após teste)
# - Domingo 02:00: cleanup mensal (Task Scheduler)
# Relatório semanal:
# - Computers with failed updates
# - Computers with pending updates
# - Updates approved this week
11. Problemas Comuns
| Problema | Causa | Solução |
|---|---|---|
| Computers não aparecem no WSUS | GPO não aplicado ou porta errada | Verificar GPO, porta 8530/8531, reg query |
| Sync falha | Proxy/firewall bloqueia Microsoft Update | Configurar proxy no WSUS, permitir *.microsoft.com |
| Base de dados enorme | Falta de cleanup, updates não declinados | Correr cleanup wizard, declinar superseded |
| Updates não instalam nos clientes | Update não aprovado para o grupo correcto | Verificar aprovação e targeting de grupo |
| IIS crasha frequentemente | App Pool com memória insuficiente | Aumentar WSUS App Pool memory limit |
12. Boas Práticas de Patching
- Deploy faseado — Piloto → Produção → Servidores
- Aprovar manualmente para servidores — nunca automático
- Cleanup mensal obrigatório — evita base de dados inflada
- Declinar updates substituídos — reduz tamanho da BD
- Disco separado para updates (não no C:)
- Configurar deadline para garantir instalação atempada
- Relatório semanal de conformidade — identificar máquinas desactualizadas
- Testar em piloto antes de produção — mínimo 3 dias
- Janela de manutenção definida — não instalar durante horas de trabalho
- Documentar processo de aprovação — quem aprova, quando, critérios
13. Checklist de Implementação
- ☐ Instalar WSUS no Windows Server 2025
- ☐ Configurar directório de updates em disco separado
- ☐ Seleccionar produtos e classificações necessários
- ☐ Configurar sync schedule (diário, madrugada)
- ☐ Criar grupos de computadores (Piloto, Produção, Servidores)
- ☐ Configurar GPO com targeting de grupos
- ☐ Forçar gpupdate nos clientes piloto
- ☐ Verificar que computadores aparecem no WSUS
- ☐ Sincronizar pela primeira vez
- ☐ Aprovar updates de segurança para Piloto
- ☐ Verificar instalação no Piloto após 3 dias
- ☐ Aprovar para Produção com deadline
- ☐ Configurar cleanup mensal (Task Scheduler)
- ☐ Criar relatório semanal de conformidade
- ☐ Documentar processo de aprovação
Artigos Relacionados
- Corrigir Windows Update Corrupto
- Windows Server 2025: Novidades e Migração
- Migrar de PowerShell 5.1 para PowerShell 7
- Windows Admin Center: Gestão de Servidores
- Registar e Documentar Tickets de Sysadmin
Baseado na documentação oficial Microsoft sobre WSUS. Licença: CC BY-SA 4.0.
