Sysprep unattended join with Win7/S2008R2 failing

sysprepunattendedwindows-server-2008-r2

This started out as an issue trying to deploy out VM's through VMWare vCenter – they previously were working flawlessly and then after I applied a few Windows updates they stopped working so flawlessly… I eventually narrowed it down to sysprep, specifically when I tell it to unattend join the domain. It fails 9 times out of 10, and I can't figure out what specifically makes it fail/work. If I remove the Microsoft-Windows-UnattendedJoin section, it seems to work fine (kind of defeats the purpose of an unattended join though 🙂 ). Below are relevant log and sysprep.xml entries. I've tried this hotfix from MS, I've made sure that there are no orhpaned ProfileList registry keys, I've tried placing the XML in c:\windows\system32\sysprep\unattend.xml, according to the DHCP logs it is getting a lease, and wiresharking the machine shows that it was communicating with the domain controllers (a single ldap query for it's machine name) prior to bombing out… I don't know what else to check for 🙁 Any ideas?

C:\Windows\Panther\UnattendGC\setuperr.log

2010-10-20 09:17:49, Error [windeploy.exe] Setup.exe failed, returning exit code [0x1f]
2010-10-20 09:17:49, Error [windeploy.exe] Failure occured during online installation. Online installation cannot complete at this time.; hr = 0x80004005

C:\Windows\Panther\UnattendGC\setupact.log

2010-08-03 23:25:07, Info [windeploy.exe] ————————————————
2010-08-03 23:25:07, Info [windeploy.exe] WinDeploy.exe launched with command-line []…
2010-08-03 23:25:07, Info [windeploy.exe] Setup has not completed, adding pending reboot.
2010-08-03 23:25:07, Info [windeploy.exe] Found generalization state [0x4], setup.exe completion flag [False] –> launching setup.exe.
2010-08-03 23:25:07, Info [windeploy.exe] Launching [C:\Windows\system32\oobe\setup.exe]…
2010-08-03 23:26:29, Info [windeploy.exe] Process exited with exit code [0x0]
2010-08-03 23:26:29, Info [windeploy.exe] Found completion flag [True], reboot requested flag [True] –> rebooting computer before proceeding with deployment…
2010-08-03 23:26:29, Info [windeploy.exe] Making sure that SystemSetupInProgress is cleared.
2010-08-03 23:26:29, Info [windeploy.exe] An immediate reboot or shutdown was requested/required… rebooting / shutting down computer
2010-08-03 23:26:29, Info [windeploy.exe] Flushing registry to disk…
2010-08-03 23:26:30, Info [windeploy.exe] Flush took 1110 ms.
2010-08-03 23:26:30, Info [windeploy.exe] WinDeploy.exe exiting with code [0x0]
2010-08-03 23:27:11, Info [windeploy.exe] ————————————————
2010-08-03 23:27:11, Info [windeploy.exe] WinDeploy.exe launched with command-line []…
2010-08-03 23:27:11, Info [windeploy.exe] Making sure that SystemSetupInProgress is cleared.
2010-08-03 23:27:12, Info [windeploy.exe] Found no unattend file.
2010-08-03 23:27:13, Info [windeploy.exe] WinSAT assessment failed with error 80040154
2010-08-03 23:27:13, Info [windeploy.exe] Launching [C:\Windows\system32\oobe\oobeldr.exe /system]…
2010-08-03 23:27:13, Info [oobeldr.exe] OOBELdr.exe launched with command-line [/system]…
2010-08-03 23:27:13, Info [oobeldr.exe] OrchestrateUpdateImageState: Updating image state from [IMAGE_STATE_SPECIALIZE_RESEAL_TO_OOBE] –> [IMAGE_STATE_UNDEPLOYABLE]
2010-08-03 23:27:13, Info [oobeldr.exe] Parsing command line arguments…
2010-08-03 23:27:13, Info [oobeldr.exe] Parsing the following command line: [/system]
2010-08-03 23:27:13, Info [oobeldr.exe] Status for unattend pass [oobeSystem] = 0x0
2010-08-03 23:27:13, Info [oobeldr.exe] Found no unattend file for oobeSystem pass; skipping pass.
2010-08-03 23:27:13, Info [oobeldr.exe] No reboot has been requested for oobeSystem unattend.
2010-08-03 23:27:13, Info [oobeldr.exe] Successfully ran oobeSystem pass.
2010-08-03 23:27:13, Info [oobeldr.exe] Launching [C:\Windows\system32\oobe\msoobe.exe]…
2010-08-03 23:27:13, Info [msoobe.exe] Starting service sppsvc
2010-08-03 23:27:14, Info [msoobe.exe] Service sppsvc reports as running
2010-08-03 23:27:14, Info [msoobe.exe] Successfully created first boot reg key
2010-08-03 23:27:14, Info [msoobe.exe] Server, exiting…
2010-08-03 23:27:14, Info [msoobe.exe] Running mandatory tasks
2010-08-03 23:27:14, Info [msoobe.exe] Doing background work directly in MandatoryTasks; eType=1
2010-08-03 23:27:15, Info [msoobe.exe] Successfully installed product key
2010-08-03 23:27:15, Info [msoobe.exe] Starting service netprofm
2010-08-03 23:27:16, Info [msoobe.exe] Service netprofm reports as running
2010-08-03 23:27:16, Info [msoobe.exe] Successfully signalled event to start up services
2010-08-03 23:27:16, Info [msoobe.exe] Doing background work directly in MandatoryTasks; eType=0
2010-08-03 23:27:16, Info [msoobe.exe] Starting service Schedule
2010-08-03 23:27:18, Info [msoobe.exe] Service Schedule is already running
2010-08-03 23:27:18, Info [msoobe.exe] Successfully verified and committed UI language settings
2010-08-03 23:27:25, Info [msoobe.exe] Successfully notified UI language change
2010-08-03 23:27:25, Info [msoobe.exe] Successfully installed Windows Recovery Environment
2010-08-03 23:27:26, Info [msoobe.exe] Successfully removed administrator profile
2010-08-03 23:27:26, Info [msoobe.exe] Exiting mandatory tasks… [0x00000000]
2010-08-03 23:27:26, Info [msoobe.exe] Cleaning up background work
2010-08-03 23:27:26, Info [oobeldr.exe] OrchestrateUpdateImageState: Updating image state from [IMAGE_STATE_UNDEPLOYABLE] –> [IMAGE_STATE_COMPLETE]
2010-08-03 23:27:26, Info [oobeldr.exe] OOBELdr.exe exiting with code [0x0]…
2010-08-03 23:27:26, Info [windeploy.exe] Process exited with exit code [0x0]
2010-08-03 23:27:26, Info [0x090008] PANTHR CBlackboard::Open: C:\Windows\Panther\SetupInfo succeeded.
2010-08-03 23:27:26, Info [0x090009] PANTHR CBlackboard::Close: c:\windows\panther\setupinfo.
2010-08-03 23:27:26, Info [windeploy.exe] WinDeploy.exe exiting with code [0x0]
2010-10-20 09:15:35, Info [windeploy.exe] ————————————————
2010-10-20 09:15:35, Info [windeploy.exe] WinDeploy.exe launched with command-line []…
2010-10-20 09:15:35, Info [windeploy.exe] Setup has not completed, adding pending reboot.
2010-10-20 09:15:35, Info [windeploy.exe] Found generalization state [0x4], setup.exe completion flag [False] –> launching setup.exe.
2010-10-20 09:15:35, Info [windeploy.exe] Launching [C:\Windows\system32\oobe\setup.exe]…
2010-10-20 09:17:00, Info [windeploy.exe] ————————————————
2010-10-20 09:17:00, Info [windeploy.exe] WinDeploy.exe launched with command-line []…
2010-10-20 09:17:00, Info [windeploy.exe] Setup has not completed, adding pending reboot.
2010-10-20 09:17:00, Info [windeploy.exe] Found generalization state [0x4], setup.exe completion flag [False] –> launching setup.exe.
2010-10-20 09:17:00, Info [windeploy.exe] Launching [C:\Windows\system32\oobe\setup.exe]…
2010-10-20 09:17:49, Info [windeploy.exe] Process exited with exit code [0x1f]
2010-10-20 09:17:49, Error [windeploy.exe] Setup.exe failed, returning exit code [0x1f]
2010-10-20 09:17:49, Error [windeploy.exe] Failure occured during online installation. Online installation cannot complete at this time.; hr = 0x80004005
2010-10-20 09:17:49, Info [windeploy.exe] Flushing registry to disk…
2010-10-20 09:17:51, Info [windeploy.exe] Flush took 1938 ms.
2010-10-20 09:17:51, Info [windeploy.exe] WinDeploy.exe exiting with code [0x80004005]

C:\sysprep\Sysprep.xml
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="generalize">
<component name="Microsoft-Windows-PnpSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
</component>
</settings>
<settings pass="oobeSystem">
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<OOBE>
<SkipUserOOBE>true</SkipUserOOBE>
<SkipMachineOOBE>true</SkipMachineOOBE>
<ProtectYourPC>1</ProtectYourPC>
<NetworkLocation>Work</NetworkLocation>
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
<HideEULAPage>true</HideEULAPage>
</OOBE>
<UserAccounts>
<AdministratorPassword>
<Value>EncryptedPassword</Value>
<PlainText>false</PlainText>
</AdministratorPassword>
</UserAccounts>
</component>
</settings>
<settings pass="specialize">
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ComputerName>ComputerName</ComputerName>
<CopyProfile>false</CopyProfile>
<RegisteredOrganization>OrgName</RegisteredOrganization>
<RegisteredOwner>OrgName</RegisteredOwner>
<ShowWindowsLive>false</ShowWindowsLive>
<TimeZone>Eastern Standard Time</TimeZone>
</component>
<component name="Microsoft-Windows-UnattendedJoin" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Identification>
<Credentials>
<Password>UnencryptedPass</Password>
<Username>unattendjoiner</Username>
<Domain>domain.com</Domain>
</Credentials>
<JoinDomain>domain.com</JoinDomain>
<DebugJoin>true</DebugJoin>
</Identification>
</component>
<component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RunSynchronous>
<RunSynchronousCommand wcm:action="add">
<Path>C:\sysprep\guestcustutil.exe cleanBootExecute</Path>
<Order>1</Order>
</RunSynchronousCommand>
<RunSynchronousCommand wcm:action="add">
<Path>C:\sysprep\guestcustutil.exe flagComplete</Path>
<Order>2</Order>
</RunSynchronousCommand>
<RunSynchronousCommand wcm:action="add">
<Path>C:\sysprep\guestcustutil.exe deleteContainingFolder</Path>
<Order>3</Order>
</RunSynchronousCommand>
</RunSynchronous>
</component>
</settings>
</unattend>

Best Answer

Still need to test a bit more, but so far I think I've found a resolution. In our VMWare cluster configuration, we had guest monitoring turned on - this enables a heartbeat between the guest VM tools and the host. If they didn't respond, it would reboot the guest. Since the VM was powered on but not running the vmware tools service during sysprep, it appears that the guest was not alive so it would reboot it. After turning it to be a less aggressive monitoring setting (high->low), it appears to be letting sysprep continue as normal :-) That explains why it was never a consistent failure on sysprep, because it was never sysprep that was failing... If I run into this issue again, I'll reopen this question.. but for now it appears that the issue is resolved.