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

# 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

Baseado na documentação oficial Microsoft sobre WSUS. Licença: CC BY-SA 4.0.

← Voltar ao Índice

Este artigo foi útil?

Duarte Spínola

Deixe um Comentário