PowerShell Windows Update: patches instalados por script não aparecem no Histórico

Administradores se surpreendem quando atualizações aplicadas por script no Windows Server 2019/2022 não surgem na interface ✔ “Exibir histórico de atualizações”. Este guia explica por quê, mostra como comprovar a instalação e apresenta práticas para gerar relatórios confiáveis.

Índice

Visão geral do problema

Ao usar scripts PowerShell (módulo PSWindowsUpdate) ou chamadas diretas às APIs COM (Microsoft.Update.Session, Downloader, Installer), as atualizações são efetivamente baixadas e aplicadas. Contudo, a lista exibida em Configurações ▶ Windows Update ▶ Exibir histórico de atualizações permanece inalterada. Esse comportamento pode confundir auditorias e relatórios de conformidade, já que a GUI parece indicar que o servidor está desatualizado — mesmo quando não está.

Por que as atualizações não aparecem?

MotivoDetalhe técnico
Instalação fora do serviço Windows UpdateScripts que se apoiam em DISM, WUSA ou na pilha CBS gravam eventos no Event Log e em Win32_QuickFixEngineering, mas não inserem dados na base DataStore.edb (WUClient). A tabela WUHistory permanece vazia, logo, nada é renderizado na GUI.
Limitações do PSWindowsUpdatePor padrão, o módulo decide se usa UseWusa ou UseDism. Esses caminhos não chamam o serviço wuauserv, portanto o histórico também não é alimentado.
Tipo de pacoteDrivers, SSU e algumas CUs instaladas “fora de banda” recebem o estado Installed no catálogo, porém são classificadas internamente como Other, ficando fora do filtro de exibição da interface gráfica.

Entendendo o fluxo interno

Quando o serviço wuauserv é quem comanda o download/instalação, cada etapa gera chamadas para %SystemRoot%\SoftwareDistribution\DataStore. É daí que a UI consome dados.
Se o patch entra pelo canal DISM/WUSA ou pelas interfaces COM sem registrar a sessão, o log é gravado somente em:

  • Event Viewer ▶ Applications and Services Logs ▶ Microsoft ▶ Windows ▶ WindowsUpdateClient
  • Win32_QuickFixEngineering (WMI) — base para Get-HotFix
  • Arquivos .cab temporários da CBS em C:\Windows\Logs\CBS

Como confirmar que o patch está aplicado

1 · Event Viewer

Abra eventvwr.msc e navegue até WindowsUpdateClient. Filtre pelos IDs 19, 20 (Installation Started) e 21 (Installation Completed) para localizar o KB.

2 · PowerShell – WMI/Win32\_QuickFixEngineering

Get-HotFix -Id KB5008276   # substitua pelo número desejado
ou
Get-CimInstance Win32_QuickFixEngineering | Where-Object HotFixID -eq 'KB5008276'

3 · DISM – Inventário de pacotes

dism /online /get-packages | findstr KB5008276

Se qualquer um dos métodos retorna o KB, o patch está presente — independentemente da ausência na GUI.

Opções e soluções práticas

O que fazerObservações práticas
Aceitar a limitação e usar Get-HotFix ou logsIdeal quando você controla o processo via automação. Inclua a saída no pipeline CI/CD ou em relatórios de compliance.
Forçar instalação via serviço Windows UpdateExecute:
Install-WindowsUpdate -MicrosoftUpdate -UseWUApi
Isso chama o IUpdateInstaller dentro do serviço, preenchendo DataStore.edb. Em servidores sem GUI, use:
wuauclt /detectnow && wuauclt /updatenow.
Registrar manualmente (avançado)Embora possible gravar WMI MSFT_WUHistoryEvent via New-CimInstance, a Microsoft não recomenda editar DataStore.edb. Uma entrada malformada pode forçar o cliente a recriar toda a pasta SoftwareDistribution.
Gerar relatório próprioNo fim do script, colete:
$kbs = Get-HotFix | Select-Object -ExpandProperty HotFixID
Salve como .csv ou envie por e‑mail. Para detalhes de log, use Get-WindowsUpdateLog (converte ETL em texto).

Dicas complementares

  • Use sconfig em Server Core se precisar que a instalação passe pela UI legada (6‑passos do antigo Windows Update).
  • Mantenha o Servicing Stack Update em dia: SSUs desatualizados podem instalar o patch mas falhar ao escrever no histórico.
  • WSUS / Windows Update for Business: esses serviços coletam status via reporting events, mesmo quando o KB entrou por script. O painel do WSUS exibirá Installed.
  • Cuidado com Rollback: se você remover um patch via wusa /uninstall, o histórico pode ficar inconsistente — a remoção é registrada, mas a instalação original continua oculta na GUI.
  • Para clusters Failover, instale um nó por vez com Install-WindowsUpdate -IgnoreReboot e insira a reinicialização no CAU; isso reduz downtime e mantém logs separados por nó.

Perguntas frequentes (FAQ)

Posso confiar em Win32_QuickFixEngineering para auditorias?

Sim. A própria Microsoft indica Get‑HotFix como fonte supported para inventário de patches. O que a GUI mostra é apenas uma projeção da mesma informação, mas filtrada pelos eventos que o cliente WU processa.
Scripts PowerShell podem atualizar o histórico automaticamente?

Somente se você chamar UseWUApi no PSWindowsUpdate ≥ v2.2.1.0. Caso contrário, será necessário instalar via wuauserv ou registrar manualmente (não recomendado).
Existe impacto em não ter o histórico preenchido?

Funcionalmente, nenhum. O patch está ativo no sistema. O impacto é administrativo: relatórios de segurança, auditorias ou ferramentas de inventário que leem somente a GUI podem reportar estado incorreto.
Posso usar GPO para forçar o histórico?

Não. As Diretivas de Grupo controlam detecção/agendamento, mas não alteram o modo como DISM/WUSA escrevem na base de dados. Para unificar logs, padronize o método de instalação (WSUS, Intune, etc.).

Checklist rápido para scripts PowerShell

  1. Carregar módulo: Install-Module PSWindowsUpdate
  2. Exigir Microsoft Update: Add-WUServiceManager -ServiceID "7971f918-a847-4430-9279-4a52d1efe18d"
  3. Instalar e registrar: Install-WindowsUpdate -MicrosoftUpdate -UseWUApi -AcceptAll -AutoReboot
  4. Logar resultado: $today = Get-Date; Get-WindowsUpdateLog -destination "C:\Logs\WU$($today.ToString('yyyyMMddHHmm')).log"
  5. Enviar e‑mail (ex.): Send-MailMessage -From ... -To ... -Subject "Relatório WU" -Attachments $log

Conclusão

A ausência de registros na página “Exibir histórico de atualizações” ao usar scripts não significa que o servidor esteja desprotegido. O que ocorre é uma diferença de canal: apenas operações conduzidas pelo serviço Windows Update alimentam a base de dados que a GUI lê. Para auditorias rigorosas, confie nos logs do Event Viewer, em Get-HotFix ou em relatórios de WSUS/Intune. Se você deseja ver tudo na interface gráfica, padronize a instalação pelo próprio wuauserv ou recorra a -UseWUApi no PSWindowsUpdate.

Índice