Se o Sysprep no Windows Server 2019 está falhando com erro fatal envolvendo o componente Microsoft‑Windows‑EventLog e códigos 0x80070003 / 0x3, a causa mais comum é o redirecionamento de logs via GPO para outro volume. Abaixo trago o diagnóstico completo e a correção definitiva, com comandos prontos.
Visão geral do cenário
Após clonar uma VM de Windows Server 2019 para criar uma imagem golden, o Sysprep /generalize
encerrava com erro fatal. No setupact.log
(caminho típico: %WINDIR%\System32\Sysprep\Panther\setupact.log
), as validações avançavam até a etapa de limpeza do serviço de logs:
... Validate pass success ...
... SysprepGeneralize: Enter
... Processing component Microsoft-Windows-EventLog
... EvtIntSysprepCleanup (wevtapi.dll) started
... dwRet = 0x3, hr = 0x80070003
... Fatal error encountered during sysprep ...
As tentativas comuns — sfc /scannow
, ajustar a chave CleanupState
no Registro ou desativar o serviço de logs — não surtiram efeito.
O que os códigos de erro significam
Origem | Código | Significado | Interpretação prática |
---|---|---|---|
Retorno interno | dwRet = 0x3 | ERRORPATHNOT_FOUND | O caminho de arquivo/diretório referenciado não existe. |
HRESULT | hr = 0x80070003 | Path not found (erro Win32 convertido) | O Windows não encontrou o local configurado para os Event Logs. |
Componente | Microsoft‑Windows‑EventLog | Limpeza de logs do Sysprep | A biblioteca wevtapi.dll tenta acessar/limpar arquivos nos caminhos ativos dos canais. |
Causa raiz comprovada
Os Event Logs estavam redirecionados por GPO/Registro para uma unidade persistente (por exemplo, D:\
), prática comum em VMs non‑persistent e ambientes VDI/RDS. Durante a fase Cleanup do Sysprep, o Windows tenta acessar e higienizar os arquivos de log nos caminhos vigentes de cada canal. Se esses caminhos estiverem fora do local padrão (%SystemRoot%\System32\winevt\Logs
) e:
- o volume não existir no momento do Sysprep;
- o diretório estiver inacessível;
- ou as ACLs impedirem acesso do serviço Windows Event Log,
o cleanup falha e o Sysprep retorna 0x80070003.
Por que as tentativas comuns não funcionam
sfc /scannow
: valida binários do sistema, mas não corrige caminhos de logs definidos por políticas.- Alterar
CleanupState
: “apaga o fogo” em uma rodada, mas mantém o caminho inválido; o erro retorna. - Desativar o serviço de logs: o Sysprep depende do Windows Event Log; desativá-lo provoca outras falhas.
Diagnóstico rápido e certeiro
Antes de qualquer alteração, confirme quais canais estão fora do diretório padrão.
Listar canais com caminho fora do padrão
PowerShell
Get-WinEvent -ListLog * |
Where-Object { $.LogFilePath -and ($.LogFilePath -notlike "$env:SystemRoot\System32\winevt\Logs*") } |
Select-Object LogName, LogFilePath |
Format-Table -AutoSize
Se algum LogFilePath
aparecer em D:\
(ou outro volume), você encontrou o motivo do erro.
Correção efetiva e segura
Remova o redirecionamento dos logs antes de rodar o Sysprep para que os caminhos voltem ao padrão.
- Mova temporariamente o servidor para uma OU sem a GPO de redirecionamento, ou
- ajuste as chaves de canal para apontar para
%SystemRoot%\System32\winevt\Logs\*.evtx
.
Passo a passo recomendado
- Reverter o caminho dos logs para o padrão Remova/ignore a GPO que altera o caminho dos logs ou redefina os principais canais:
PowerShell foreach ($log in 'Application','System','Security','Setup') { wevtutil sl $log /lfn:$env:SystemRoot\System32\winevt\Logs\$log.evtx }
Em seguida, atualize políticas:cmd gpupdate /force
- Verificar os caminhos atuais
PowerShell Get-WinEvent -ListLog * | Where-Object { $.LogFilePath -and ($.LogFilePath -notlike "$env:SystemRoot\System32\winevt\Logs*") } | Select-Object LogName, LogFilePath | Format-Table -AutoSize
Se ainda houver canais fora do padrão, redefina-os individualmente. Para canais “clássicos”, use os nomes acima. Para canais sobMicrosoft-*/Operational
, recomendo primeiro inspecionar o caminho atual:PowerShell wevtutil gl "Microsoft-Windows-GroupPolicy/Operational" | Select-String logFileName Use o valor exibido para criar o .evtx no diretório padrão, se necessário: wevtutil sl "Microsoft-Windows-GroupPolicy/Operational" /lfn:"$env:SystemRoot\System32\winevt\Logs\Microsoft-Windows-GroupPolicy%4Operational.evtx"
- Garantir que o serviço Windows Event Log esteja ativo
PowerShell Get-Service EventLog | Set-Service -StartupType Automatic Start-Service EventLog
- Executar o Sysprep novamente
cmd %WINDIR%\System32\Sysprep\Sysprep.exe /generalize /oobe /shutdown
Automatização para imagens golden
Para padronizar o processo em laboratórios e pipelines de captura, use o trecho abaixo. Ele faz backup dos caminhos, normaliza os principais canais para o diretório padrão e registra o que foi alterado.
PowerShell
Executar em sessão elevada (Administrador).
$stamp = Get-Date -Format "yyyyMMdd-HHmmss"
$report = "C:\Temp\EventLogs-Paths-$stamp.csv"
New-Item -ItemType Directory -Force -Path (Split-Path $report) | Out-Null
\$logs = Get-WinEvent -ListLog \* | Where-Object { $\_.LogFilePath }
\$logs | Select-Object LogName, LogFilePath | Export-Csv -NoTypeInformation -Path \$report
Redefinir apenas os canais clássicos para o padrão conhecido
'Application','System','Security','Setup' | ForEach-Object {
\$default = Join-Path \$env\:SystemRoot "System32\winevt\Logs\$*.evtx"
Write-Host "Definindo \$* para \$default"
wevtutil sl $\_ /lfn:"\$default"
}
Write-Host "Relatório salvo em \$report"
Dica: para canais “Microsoft‑*/Operational”, utilize wevtutil gl <canal>
para descobrir o nome de arquivo “oficial” (com %4
no meio) antes de mover.
Onde a GPO costuma alterar o caminho
Administrações variam: algumas usam Preferências de Registro; outras, modelos ADMX/customização. Dois locais que frequentemente carregam o caminho do arquivo:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels<Canal>\File
HKLM\SYSTEM\CurrentControlSet\Services\EventLog<Log clássico>\File
Se uma GPO estiver gravando esses valores para D:\
(ou similar), o Sysprep herdará esses caminhos durante o generalize.
Tabela de verificação rápida
Verificação | Como fazer | Resultado esperado |
---|---|---|
Listar logs fora do padrão | Get-WinEvent -ListLog * com filtro por LogFilePath | Nenhum caminho fora de %SystemRoot%\System32\winevt\Logs |
Reverter caminhos essenciais | wevtutil sl Application|System|Security|Setup /lfn:<padrão> | Quatro logs clássicos no local padrão |
Serviço de logs ativo | Get-Service EventLog | Running e Automatic |
Executar Sysprep | Sysprep.exe /generalize /oobe /shutdown | Conclui sem erros |
Considerações importantes para VMs non‑persistent
- Aplique a GPO de redirecionamento após a captura: deixe a imagem golden no padrão e, somente depois de selada, mova o computador para a OU com redirecionamento.
- Se o redirecionamento for obrigatório já na imagem: assegure que o volume/diretório exista e tenha ACLs apropriadas para o serviço EventLog durante o Sysprep.
- Snapshots são seus aliados: antes de mexer em canais, tire um snapshot da VM.
Boas práticas para evitar recorrência
- Padrão até a selagem: mantenha o caminho default dos logs até concluir o Sysprep.
- Documente canais especiais: alguns produtos criam canais próprios com caminhos customizados; audite antes da captura.
- Evite desativar o Event Log: é pré‑requisito para o Sysprep e para o diagnóstico do próprio sistema.
- Auditoria preventiva: inclua o comando de inventário de
LogFilePath
no roteiro de preparação da imagem.
Exemplos de correção para canais específicos
Alguns canais usam nomes de arquivo padronizados com “%4” separando o provedor e o canal. Exemplos:
PowerShell
Política de Grupo (Operational)
wevtutil sl "Microsoft-Windows-GroupPolicy/Operational" `
/lfn:"$env:SystemRoot\System32\winevt\Logs\Microsoft-Windows-GroupPolicy%4Operational.evtx"
Windows Update (Operational)
wevtutil sl "Microsoft-Windows-WindowsUpdateClient/Operational" \`
/lfn:"\$env\:SystemRoot\System32\winevt\Logs\Microsoft-Windows-WindowsUpdateClient%4Operational.evtx"
Erros frequentes e como evitá-los
- Assumir que “apenas os quatro clássicos” bastam: em muitos ambientes é suficiente, mas soluções de segurança/backup criam canais extras; verifique todos os
LogFilePath
. - Permissões insuficientes: se insistir em armazenar logs fora do sistema, garanta que a conta do serviço Event Log possa criar e escrever arquivos no diretório.
- Montagem tardia de volumes: volumes anexados por script no startup podem não existir durante o Sysprep; resultará em
0x80070003
.
Como ler o setupact.log
de forma objetiva
Procure por trechos próximos a “EventLog” e “Cleanup” para focar no ponto da falha:
PowerShell
Select-String -Path "$env:WINDIR\System32\Sysprep\Panther\setupact.log" `
-Pattern "EventLog|Cleanup|wevtapi|0x80070003" -Context 2,2
Em paralelo, verifique o setuperr.log
no mesmo diretório para mensagens resumidas do erro.
Resumo em termos operacionais
Problema: o Sysprep falha na limpeza do componente Microsoft‑Windows‑EventLog com 0x80070003
porque os caminhos dos Event Logs apontam para um local inexistente/inacessível.
Solução: remover o redirecionamento antes do Sysprep, restaurando os logs para %SystemRoot%\System32\winevt\Logs
, garantir o serviço Event Log ativo e então executar o Sysprep
.
Perguntas frequentes
Posso manter os logs em D:\ e ainda assim rodar o Sysprep?
Sim, desde que durante o Sysprep o volume e o diretório existam e permitam escrita pelo serviço Event Log. Na prática, é mais seguro manter o padrão até a selagem e aplicar o redirecionamento depois.
Preciso reiniciar para que o wevtutil sl
tenha efeito?
Para os logs clássicos, normalmente não. Para alguns canais, a mudança é aplicada imediatamente; para outros, ocorre na próxima inicialização. Como o Sysprep reinicia/desliga ao final, isso não costuma ser um problema.
E se o erro continuar após voltar ao padrão?
Revise se algum canal “Microsoft-*/Operational
” continua apontando para outro volume, verifique permissões no diretório padrão, limpe arquivos .evtx
corrompidos (renomeie-os) e confira se a GPO não está reaplicando o caminho inesperadamente.
Conclusão
Quando o Sysprep do Windows Server 2019 para em EvtIntSysprepCleanup
com 0x80070003
, quase sempre o culpado é um caminho de Event Log fora do padrão. Reverter temporariamente para %SystemRoot%\System32\winevt\Logs
, garantir o serviço em execução e só depois selar a imagem elimina o erro de forma definitiva. Caso precise redirecionar novamente, faça-o após capturar o golden image — ou crie as condições para que o caminho alternativo exista durante o processo. Esse cuidado simples economiza horas de tentativas e reforça a confiabilidade do seu pipeline de imagens.