Migrating from Windows XP to Windows 8.1 using MDT 2013

Most people using MDT at this point have made the migration to Windows 7 and are looking at MDT 2013 to help with getting to Windows 8.1.  But there are a number of stragglers who are looking to go directly from Windows XP to Windows 8.1 (and hopefully finishing that by April 2014 when Windows XP support expires).

The challenge with this scenario is that some of the tools released as part of the ADK for Windows 8.1 don’t support Windows XP.  That includes the User State Migration Tool (version 6.3) and BOOTSECT.EXE, one of the core deployment tools used to put a new boot sector onto an existing Windows XP device so that it can boot a modern OS.

Fortunately, there are workarounds for these two challenges.  In the case of USMT, you can use the previous version from the ADK for Windows 8 to capture the user state and the new version from the ADK for Windows 8.1 to restore it.  And for BOOTSECT.EXE, you can just use the older version from the ADK for Windows 8 as it still runs on Windows XP.

So the real question then is “how do you get MDT to use these older versions,” since it only supports the ADK for Windows 8.1 and the tools included in it.  That requires a little work.  Let’s review the steps.

  1. Replace ZTIUserState.wsf in your MDT 2013 deployment share “Scripts” folder with the one from the attached zip file.  (Don’t try to put this script in any other version of MDT, older or newer.  It’s only designed for MDT 2013.  Feel free to compare the file with the original version to see the changes that I made.)
  2. Install the ADK for Windows 8 on a Windows 7 or Windows 8 system.  You only need to select two components, Deployment Tools and User State Migration tool (which will make the download much faster):
    image
  3. Copy the USMT files from the system with the ADK for Windows 8 to the deployment share:
    XCOPY "C:\Program Files (x86)\Windows Kits\8.0\Assessment and Deployment Kit\User State Migration Tool\x86" "\\SERVER\DeploymentShare$\Tools\x86\USMTX"
    XCOPY "C:\Program Files (x86)\Windows Kits\8.0\Assessment and Deployment Kit\User State Migration Tool\amd64" "\\SERVER\DeploymentShare$\Tools\x64\USMTX"
  4. Make a backup copy of the existing BOOTSECT.EXE executables from the ADK for Windows 8.1 installation folders (C:\Program Files (x86)\Windows Kits\8.1\Assessment and Deployment Kit\Deployment Tools\<platform>\BCDBOOT\bootsect.exe).
  5. Copy the BOOTSECT.EXE executables from the ADK for Windows 8 to the computer running MDT 2013, replacing the version from the ADK for Windows 8.1:
    COPY "C:\Program Files (x86)\Windows Kits\8.0\Assessment and Deployment Kit\Deployment Tools\x86\BCDBoot\bootsect.exe" "\\Server\C$\Program Files (x86)\Windows Kits\8.1\Assessment and Deployment Kit\Deployment Tools\x86\BCDBoot\bootsect.exe"
    COPY "C:\Program Files (x86)\Windows Kits\8.0\Assessment and Deployment Kit\Deployment Tools\amd64\BCDBoot\bootsect.exe" "\\Server\C$\Program Files (x86)\Windows Kits\8.1\Assessment and Deployment Kit\Deployment Tools\amd64\BCDBoot\bootsect.exe"
  6. Update the deployment share (which will copy the “older” BOOTSECT.EXE from the ADK folders to the deployment share when it detects that the date/time is different on the file).

A few comments on this setup:

  • You might ask why the USMT files are being copied into the USMTX folder.  Well, there are two parts to that:
  • MDT 2013 puts USMT 6.3 into the USMT 5 folder.  This is a carry-over from MDT 2012 Update 1.  While MDT was updated to pull the new USMT 6.3 from the ADK, it didn’t change where it put it.  Hence, it reused the USMT5 folder for USMT 6.3.
  • The ZTIUserState.wsf script uses the last character of the folder name (e.g. “5” from a folder named “USMT5” or “X” from a folder named “USMTX”) in various places.  Painfully obvious after I initially tried to use “USMT5.0” as the old version and things didn’t work right.  (I’d like to blame someone else for that logic, but it’s quite possible that I wrote it that way…)
  • You might also ask why you can’t just copy the BOOTSECT.EXE executable into the deployment share directly.  This is because MDT is smart enough to recopy the file from the ADK folder any time it changes in size or timestamp.  So if you don’t replace the version in the ADK folder, you’ll find the file gets overwritten with the newer one and breaks things again.
  • I’ve only tried this with Lite Touch deployments.  The ZTIUserState.wsf script is also used with MDT-created UDI task sequences in ConfigMgr 2012 R2, performing an offline USMT capture.  In that scenario, the script uses whatever USMT package was configured in the task sequence; it doesn’t select one dynamically based on the original OS.  So you would likely need to do some different work to get this to work.  See the ConfigMgr blog at https://blogs.technet.com/b/configmgrteam/archive/2013/09/12/how-to-migrate-user-data-from-win-xp-to-win-8-1-with-system-center-2012-r2-configmgr.aspx for more information on the general approach needed there.  (You would have to consciously replace the ZTIUserState.wsf script in the MDT toolkit files package anyway to get it to use this new script.  The steps above will only affect the Lite Touch deployments from the deployment share that you update.)
  • The attached ZTIUserState.wsf will only work with MDT 2013 – I have no idea if it will work with previous versions of MDT, but then again previous versions don’t support Windows 8.1 anyway so there’s really no need to try.  I would also not suggest trying to use this script with any newer versions of MDT either.  (Fortunately Windows XP will be unsupported before a new version of MDT would be released anyway.)
  • If by chance you are using MDT on an x86 OS instead of an x64 OS, you’ll need to change the “Program Files (x86)” path to just “Program Files” in the above steps.

Remember, if you are still running Windows XP, you’re running out of time – April is right around the corner…

ZTIUserState.zip