[Forum FAQ]Workaround: MDT 2013 to deploy Windows 10 Technical Preview (9926 build)

    General discussion

  • Description

    When Windows 10 Technical Preview (9926 build) released in January, a lot of people try to deploy this build via MDT 2013, maybe the process works well, but when we restart to finish the installation, we may get this similar error:

    Cause and Workaround

    Scenario 1: Some MDT scripts would use the OScurrrentversion value as a parameter to apply settings, for previous versions, the version number looks like this:

    But for the current 9926 build, it looks like this:

    Obviously, the Windows 8.1 Pro is wrong information about this build, but this is not the cause for our current issue.

    For deployment, the key script is LTIApply.wsf which is located at DeploymentShare\Scripts, we can edit it and get that there are many code blocks to compare the currentversion number, for example:

    ' If Vista or above, copy the script and its dependencies locally as they'll be needed to prep the BCD later
    			If Left(oEnvironment.Item("OSCurrentVersion"), 1) >= "6" then
    				oUtility.VerifyPathExists oEnvironment.Item("_SMSTSMDataPath") & "\Scripts"
    				For each sScript in Array("LTIApply.wsf", "ZTIBCDUtility.vbs", "ZTIConfigFile.vbs", "ZTIDiskUtility.vbs", "ZTIUtility.vbs", "ZTIDataAccess.vbs")
    					oLogging.CreateEntry "Copying " & oUtility.ScriptDir & "\" & sScript & " to " & oEnvironment.Item("_SMSTSMDataPath") & "\Scripts\" & sScript, LogTypeInfo
    					oFSO.CopyFile oUtility.ScriptDir & "\" & sScript, oEnvironment.Item("_SMSTSMDataPath") & "\Scripts\" & sScript, true
    			End if
    		End if

    As we can see the script function get the left first string of OS current version to compare with “6”, the string comparison is not as integer comparison, so for build 9926, “1” is not larger or equal to “6”.

    For this code block which copies scripts to prepare BCD later would not run in 9926 build.

    A workaround is to edit the strings comparison like this:

    Left(oEnvironment.Item("OSCurrentVersion"), 2) = "10"

    There is another situation during the apply image code block:

    ' Apply the specified image
    			If sFile = "" then
    				iRetVal = UnattendedInstall
    			Elseif Left(sOSBuild, 1) < "6" then
    				iRetVal = ApplyImage( "nt52" )
    			ElseIf Left(sOSBuild, 3) = "6.0" then
    				iRetVal = ApplySetup
    				iRetVal = ApplyImage( "nt60" )
    			End if

    Actually, this code does not apply for Windows 10 Technical Preview (9926 build), we can edit like this:

    Elseif Left(sOSBuild, 1) < "6" and Left(sOSBuild, 1) > "2"  then

                                                                    iRetVal = ApplyImage( "nt52" )

    Otherwise, installation process cannot apply UnattendedInstall.

    Scenario 2: The second reason would be the dism. Generally, it is an unsupported scenario to service an up level image using low level dism.

    MDT 2013 uses winpe.wim from ADK 8.1 installation directory to generate LiteTouch PE, in Windows 10 Technical Preview (9926 build), the dism version is:

    So, we best prepare a winpe.wim to generate LiteTouch PE, the workaround is to download the ADK 10:


    Currently, MDT 2013 cannot associate with ADK 10, it associates with ADK 8.1 by default. So if we want to generate an appropriate winpe, we need replace two folders in ADK 8.1 with ADK 10 folders, for example, I would like to create an x64 version WinPE, I need backup the folders in ADK 8.1 and replace with these two folders (simply copy them to the same location for ADK 8.1):

    DISM under Deployment Tools

    amd64 under Windows Preinstallation Environment

    Here is the newest LiteTouch PE:

    The build number for winpe is 9933.

    Then we can deploy Windows 10 Technical Preview (9926 build) via MDT 2013.

    Actually, since this is Technical Preview, this workaround does not apply to production environment, we only recommend to test in lab environment.

    The good news is that we have released a preview version for MDT 2013 update 1 which provides the support for Windows 10 Technical Preview (9926 build) and completely revises Windows version logic including changes from string to integer comparison (“10” !> “6” but 10 > 6) and a new ZTIUtility function, GetMajorMinorVersion:


     (New members must first join the MDT group of the Client Management program on Connect)

    Please click to vote if the post helps you. This can be beneficial to other community members reading the thread.

    Friday, March 20, 2015 1:05 PM

All replies

  • Thank for the write up.  I have "streamlined" the process to make it forward compatible with the new Tech Previews.

    I am using the following.

    - MDT 2013

    - Windows 8.1 ADK

    - Additional edits to LTIApply.wsf as detailed in original article with some modifications listed below.

    - Custom DISM script (link)

    1) Edit LTIApply.wsf and change the following code.

    Old Code

    If Left(oEnvironment.Item("OSCurrentVersion"), 1) >= "6" then

    New Code

    If ((Left(oEnvironment.Item("OSCurrentVersion"), 1) >= "6") or (Left(oEnvironment.Item("OSCurrentVersion"), 2) = "10")) then

    Then remove the following code and replace with the new code.

    Old Code

    Elseif Left(sOSBuild, 1) < "6" then
    	iRetVal = ApplyImage( "nt52" )

    New Code

    Elseif Left(sOSBuild, 1) < "6" and Left(sOSBuild, 1) > "2" then
    	iRetVal = ApplyImage( "nt52" )

    When it comes to DISM, no need to change the current structure.  Use the script at the following location and it will pull the DISM files from the Windows 10 WIM file automatically for you and apply them to the installation session.  Does not modify your MDT 2013 ADK in any way.

    A very smart guy figured this out, many kudos to Frank Lesniak for coming up with this little trick.


    After making only these changes, I am now able to deploy Windows 10 Technical Preview builds 9879 - 10061.

    Enjoy!  :)

    Thursday, April 9, 2015 10:00 PM
  • Thanks for the kudos, Derek - and thanks for the great write-up!
    Wednesday, June 3, 2015 9:15 PM
  • Credit where credit is due Frank.  :)
    Wednesday, June 3, 2015 9:19 PM