Su Windows Server 2019 clonato, Sysprep può fallire con l’errore 0x80070003 durante la fase Cleanup quando i file .evtx degli Event Log sono stati reindirizzati fuori dal percorso predefinito. In questa guida spiego causa, diagnostica e fix definitivo, con procedure e script pronti all’uso.
Panoramica del problema
Errore: Sysprep si interrompe con codice 0x80070003 (ERRORPATHNOT_FOUND) durante la fase di pulizia (Cleanup), segnalando un fallimento del componente Microsoft‑Windows‑EventLog (EvtIntSysprepCleanup in wevtapi.dll).
Sintesi della causa
Una GPO (o uno script di configurazione) aveva reindirizzato i file di log evento da %SystemRoot%\System32\Winevt\Logs verso un disco persistente D:\. Durante la generalizzazione, Sysprep pretende la struttura predefinita sotto Winevt\Logs su %SystemRoot%. Non trovandola, la cleanup del componente Event Log va in errore e l’intero Sysprep fallisce.
Effetti tipici su sistemi clonati
- L’unità di destinazione (
D:\) può non esistere o avere ACL differenti, rendendo impossibile la creazione/apertura dei file .evtx previsti. - Alcuni channel personalizzati (es.
Microsoft-Windows-*/Operational) risultano puntare a percorsi non validi. - La voce di log dichiara l’impossibilità di completare
EvtIntSysprepCleanup.
Soluzioni tentate e risultato
| Tentativo | Azione | Esito |
|---|---|---|
| Reset di Sysprep | Modifica di HKLM\SYSTEM\Setup\Status\SysprepStatus\CleanupState da 2 a 7 | Irrisolutivo |
| Disattivazione Event Log | Disabilitazione del servizio/chiavi di registro | Irrisolutivo e rischioso |
| Ripristino percorso log | Spostamento del server in un’OU senza GPO di reindirizzamento (log di nuovo in %SystemRoot%) | Risolutivo: Sysprep completato con successo |
Perché la fase Cleanup fallisce
Durante Generalize, Sysprep invoca routine interne (tra cui EvtIntSysprepCleanup) per riportare la macchina a uno stato “agnostico”. La componente Event Log ripristina e ripulisce la topologia predefinita dei log. Se i canali puntano a un percorso alternativo (es. D:\EventLogs\*.evtx) e quel percorso è inesistente/non raggiungibile o semplicemente diverso dal default, il controllo fallisce con ERRORPATHNOT_FOUND (0x80070003).
Indicatori chiave nei log
- setupact.log e setuperr.log (cartella
C:\Windows\System32\Sysprep\Panther) con riferimenti awevtapi.dll/EvtIntSysprepCleanup. - Voci in Event Viewer che menzionano Windows Event Log e file non trovati.
Diagnosi rapida e conferma causa
- Apri i log di Sysprep:
notepad C:\Windows\System32\Sysprep\Panther\setupact.log notepad C:\Windows\System32\Sysprep\Panther\setuperr.logCerca riferimenti awevtapi,EvtIntSysprepCleanup,ERRORPATHNOT_FOUND. - Elenca e interroga i canali Event Log con
wevtutil:wevtutil el > C:\Temp\channels.txt for /f "usebackq delims=" %c in ("C:\Temp\channels.txt") do @wevtutil gl "%c" | findstr /i "logfile logfilename path file"Controlla se i canali puntano a percorsi fuori da%SystemRoot%\System32\Winevt\Logs. - Verifica nel Registro i canali:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\*Accertati che il valoreFile(talvolta indicato comeLogFilePath) punti a%SystemRoot%\System32\Winevt\Logs\*.evtx. - Raccogli l’RSOP per confermare il reindirizzamento via GPO/script:
gpresult /h C:\Temp\gp.html && start C:\Temp\gp.html
Procedura consigliata (risoluzione definitiva)
- Ispeziona i log di Sysprep (
setupact.log,setuperr.log) per identificare il modulo bloccante (EvtIntSysprepCleanup). - Controlla i canali Event Log in
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\*e assicurati che il valoreFile/LogFilePathpunti al percorso predefinito. - Se è attivo il reindirizzamento tramite GPO o script:
- rimuovilo temporaneamente prima di eseguire Sysprep (sposta il computer in un’OU “quarantena” senza GPO e forza
gpupdate /force), oppure - ripristina i canali manualmente con:
wevtutil sl <Channel> /lfn:%SystemRoot%\System32\Winevt\Logs<Channel>.evtx(vedi script più robusti qui sotto per gestire i nomi con/).
- rimuovilo temporaneamente prima di eseguire Sysprep (sposta il computer in un’OU “quarantena” senza GPO e forza
- Riavvia il server e riesegui Sysprep con Generalize + Shutdown.
- Dopo la creazione dell’immagine, riapplica il reindirizzamento dei log se necessario (preferibilmente con script idempotenti che rispettino Sysprep).
Ripristino via GPO: come farlo senza rischi
Se il reindirizzamento è stato introdotto da policy, la via più pulita è isolare temporaneamente il server:
- Crea un’OU “Sysprep-Bypass” senza le GPO di logging.
- Sposta l’oggetto computer del server nell’OU.
- Esegui:
gpupdate /force gpresult /rper verificare che le GPO non siano più applicate. - Conferma che
C:\Windows\System32\Winevt\Logscontenga i principali .evtx (Application, Security, System, Setup, ecc.). In caso manchino, crea la cartella e lascia che il servizio Event Log rigeneri i file all’avvio.
Nota: evitare di disattivare il servizio Windows Event Log (eventlog): è un prerequisito per Sysprep e per innumerevoli componenti di sistema.
Ripristino manuale dei canali: script e comandi utili
Controllo canali “non conformi”
Questo script PowerShell elenca i canali la cui destinazione non è la cartella predefinita:
$default = "$env:SystemRoot\System32\Winevt\Logs"
Get-WinEvent -ListLog * | Where-Object {
$.LogFilePath -and ($.LogFilePath -notlike "$default*")
} | Select-Object LogName, LogFilePath | Format-Table -Auto
Reset massivo (gestione nomi con “/”)
I canali con nomi del tipo Microsoft-Windows-TaskScheduler/Operational usano nei file %4 al posto di /. Lo script seguente effettua il reset prudente solo dove necessario:
$default = "$env:SystemRoot\System32\Winevt\Logs"
$changed = @()
Get-WinEvent -ListLog * | ForEach-Object {
$channel = $_.LogName
$current = $_.LogFilePath
if (-not $current -or ($current -notlike "$default*")) {
$safeName = ($channel -replace '/', '%4') + '.evtx'
$target = Join-Path $default $safeName
Write-Host "Reset: $channel => $target"
wevtutil sl "$channel" /lfn:"$target" | Out-Null
$changed += [PSCustomObject]@{ Channel=$channel; From=$current; To=$target }
}
}
$changed | Format-Table -Auto
Suggerimento: esegui prima una dry-run rimuovendo il comando wevtutil sl e stampando solo i percorsi per revisione.
Comandi “a colpo singolo”
wevtutil gl System
wevtutil gl Application
wevtutil gl Security
wevtutil gl Setup
wevtutil sl System /lfn:%SystemRoot%\System32\Winevt\Logs\System.evtx
wevtutil sl Application /lfn:%SystemRoot%\System32\Winevt\Logs\Application.evtx
wevtutil sl Security /lfn:%SystemRoot%\System32\Winevt\Logs\Security.evtx
wevtutil sl Setup /lfn:%SystemRoot%\System32\Winevt\Logs\Setup.evtx
Verifica post‑ripristino
- Riavvia il server e controlla che il servizio Windows Event Log sia In esecuzione (
services.mscoGet-Service eventlog). - Conferma che i principali .evtx in
Winevt\Logscrescano di dimensioni dopo qualche minuto. - Riesegui Sysprep:
%WINDIR%\System32\Sysprep\Sysprep.exe /generalize /oobe /shutdown - Esamina nuovamente
setupact.logesetuperr.logper assicurarti che non compaiano più errori di path.
Buone pratiche per evitare ricadute
- Esegui Sysprep prima di installare agent, antivirus, backup o componenti che applicano configurazioni persistenti (incluse modifiche ai log).
- Conserva i log di Sysprep (archiviali con la build dell’immagine): permettono diagnosi rapide su problemi ricorrenti.
- Automatizza con Task Sequence (MDT/SCCM/Intune): durante Generalize applica step che disabilitino temporaneamente policy o servizi critici (reindirizzamento log incluso) e li ripristinino solo alla fine del Specialize/OOBE.
- Evita di spostare permanentemente i log su unità non garantite nella golden image (es. volumi dati che potrebbero non esistere negli ambienti di destinazione).
- Documenta il mapping dei canali: se proprio devi reindirizzare, usa script idempotenti e prevedi una routine di “reset pre‑Sysprep”.
Domande frequenti (FAQ)
Posso “forzare” Sysprep cambiando solo CleanupState?
No. Alterare CleanupState o altri flag può far ripartire Sysprep, ma la causa radice rimane: al primo controllo di Event Log tornerai al medesimo errore.
Disabilitare il servizio Event Log aiuta?
È sconsigliato: molti componenti, incluso Sysprep, dipendono da eventlog. Disabilitarlo introduce instabilità e non risolve la mancanza del percorso predefinito.
Il problema riguarda solo Windows Server 2019?
La dinamica è replicabile anche su altre versioni (es. 2016/2022) se si altera la posizione dei log. Questa guida è scritta sul caso concreto di Windows Server 2019 clonato.
Posso mantenere il reindirizzamento dopo l’immagine?
Sì, ma solo dopo aver completato Sysprep. Reapplicalo nel post‑deployment (primo avvio) tramite GPO o script di provisioning.
Checklist operativa (rapida)
- Leggi
setupact.logesetuperr.log→ identificaEvtIntSysprepCleanup. - Controlla i canali in
WINEVT\Channels→ verificaFile/LogFilePath. - Rimuovi temporaneamente il reindirizzamento (OU senza GPO) o resetta i canali con
wevtutil sl. - Verifica che
%SystemRoot%\System32\Winevt\Logscontenga i .evtx principali. - Riavvia → esegui Sysprep con Generalize + Shutdown.
- Reapplica il reindirizzamento solo dopo la creazione dell’immagine.
Appendice: percorsi e file utili
| Elemento | Percorso/Comando | Note |
|---|---|---|
| Cartella log Eventi (default) | %SystemRoot%\System32\Winevt\Logs | Deve essere presente e scrivibile. |
| Log Sysprep | C:\Windows\System32\Sysprep\Panther\setupact.logC:\Windows\System32\Sysprep\Panther\setuperr.log | Cerca wevtapi.dll, EvtIntSysprepCleanup. |
| Registro canali | HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\* | Valore chiave: File (o LogFilePath). |
| Elenco canali | wevtutil el | Elenca tutti i canali registrati. |
| Dettagli canale | wevtutil gl <Channel> | Mostra percorso file e stato. |
| Imposta log file | wevtutil sl <Channel> /lfn:<PercorsoEvtx> | Usa %4 al posto di / nei nomi file. |
| Report GPO | gpresult /h C:\Temp\gp.html | Conferma se c’è un reindirizzamento attivo. |
Riepilogo finale
Se Sysprep su Windows Server 2019 clonato fallisce con 0x80070003 e riferimento a EvtIntSysprepCleanup, la causa più probabile è il reindirizzamento dei log eventi fuori da %SystemRoot%\System32\Winevt\Logs. Il fix pulito è ripristinare temporaneamente i percorsi di default (rimuovendo la GPO o eseguendo il reset dei canali), riavviare e rieseguire Sysprep (Generalize + Shutdown). Una volta creata l’immagine, potrai reapplicare il reindirizzamento in sicurezza. Segui la checklist e, se gestisci immagini a scala, automatizza i passaggi in una task sequence per eliminare definitivamente questo blocco.
Procedura consigliata (riassunto puntuale)
- Verificare i log di Sysprep (
setupact.log,setuperr.log). - Controllare
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\*e il valoreFile/LogFilePath. - Se c’è reindirizzamento via GPO/script:
- rimuoverlo temporaneamente prima di Sysprep, oppure
- ripristinare manualmente ogni canale:
wevtutil sl <Channel> /lfn:%SystemRoot%\System32\Winevt\Logs<Channel>.evtx
- Riavviare e rieseguire Sysprep con Generalize + Shutdown.
- Reapplicare il reindirizzamento dei log solo a immagine creata.
Buone pratiche supplementari
- Eseguire Sysprep prima di installare agent, antivirus, backup o altre configurazioni persistenti.
- Conservare i log di Sysprep per diagnosi future.
- Valutare l’uso di una task sequence (MDT/SCCM/Intune) che disabiliti temporaneamente policy o servizi critici durante la generalizzazione.
