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.log
Cerca 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/LogFilePath
punti 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 /r
per verificare che le GPO non siano più applicate. - Conferma che
C:\Windows\System32\Winevt\Logs
contenga 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.msc
oGet-Service eventlog
). - Conferma che i principali .evtx in
Winevt\Logs
crescano di dimensioni dopo qualche minuto. - Riesegui Sysprep:
%WINDIR%\System32\Sysprep\Sysprep.exe /generalize /oobe /shutdown
- Esamina nuovamente
setupact.log
esetuperr.log
per 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.log
esetuperr.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\Logs
contenga 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.log C:\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.