How To Image A Computer With Windows 10 Using dism

If you want to image a lot of computers with a clean Windows 10 image, Microsoft  has lots of built-in tools to help do this, but it’s easy to get lost and overwhelmed with their documentation.  To alleviate that headache, I will explain step-by-step how to:

  • create and use an Unattended.xml file that will:
    • skip the initial setup screens
    • create a local admin account
    • activate Windows with a product key
    • (optionally) configure other Window settings
  • capture a deployable Windows 10 .wim file using sysprep
  • deploy the image to multiple computers using the dism command line tool and WinPE
  • (optionally) add drivers to the .wim file

High-level Overview

I often found myself getting lost while trying to make a universal Windows 10 .wim image file, so in this section I will give a broad overview from start to finish of the steps needed to be completed.  This will also lay out the structure of this article.

  1. Install the Windows Automated Deployment Kit (ADK)
  2. Acquire a Windows 10 installation disc or .iso
  3. Create an Unattended.xml answer file
  4. Install Windows 10 on a spare computer
  5. Copy the Unattended.xml file to the spare computer
  6. Run sysprep.exe using the Unattended.xml file
  7. Create a WinPE disc or bootable USB drive
  8. Boot the computer to WinPE after it shuts down
  9. Capture the image to a .wim file using dism
  10. Deploy the image to a computer using dism

Install The Windows Automated Deployment Kit

Download and install the Windows 10 ADK.  You can just accept all the defaults the installer offers.  You mainly need the Deployment Tools, but the other stuff that is pre-selected will be useful for some other projects, so keep them selected.

w10-deployment-tools.png

Acquire A Windows 10 Installation Disc Or .iso

You will need some form of a Windows 10 install media.

Create An Unattended.xml Answer File

You will need to create an answer file, which contains the settings you want to be applied at the time you deploy the image to a computer.  There are many to choose from, but this article will walk though some basic ones that many organizations might use.

Copy install.wim To Your Desktop

Before you can make an answer file, Windows needs to know what sort of answers can be applied.  It finds this information from install.wim, which is located at the root of the installation disc.  Copy it to your Desktop since it cannot be read directly from the CD or .iso.

Use install.wim To Generate Some Categories To Answer

  1. Open Windows System Image Manager as an administrator
  2. Right-click in the lower-left corner
  3. Choose Select Windows Image…w10-answer-file-select-wim.png
  4. Navigate to your Desktop
  5. Open install.wimw10-answer-file-choose-wim1.png
  6. Choose Yes on the dialog that appearsw10-answer-file-create-catalog.png
  7. Right-click in the top-right section
  8. Choose New Answer File…w10-new-asnwer-file.png
  9. Stretch the windows and panes so they are easier to readw10-answer-file-strech-window.png

Begin Adding Answers To Your Answer File

Hard Drive Partitioning

Microsoft_Windows_Deployment
  1. Right click amd64_Microsoft_Windows_Deployment_neutral
  2. Choose Add Setting to Pass 4 Specialize…deployment-4-specialize.png
  3. Expand amd64_Microsoft-Windows-Deployment-neutral within the Answer File pane
  4. Highlight ExtendOSPartition
  5. Set Extend to trueextendospartition-true.png

Computer Name, Product Key, Time Zone

Microsoft-Windows-Shell-Setup
  1. Right-click amd64_Microsoft-Windows-Shell-Setup_neutral
  2. Choose Add Setting to Pass 4 Specialize…
  3. Highlight amd64_Microsoft-Windows-Shell-Setup under the Answer File pane
    1. Set ComputerName to %COMPUTERNAME%
    2. Set ProductKey to your Windows 10 product code
    3. Set RegisteredOrganization to your company’s name
    4. Set TimeZone to Central Standard Time (or whatever time zone you are in)shell-setup.png

Join A Domain

Microsoft-Windows-UnattendedJoin
  1. Right-click amd64_Microsoft-Windows-UnattendedJoin_neutral
  2. Choose Add Setting to Pass 4 Specialize…unattendedJoin-pass4.png
  3. Expand amd64_Microsoft-Windows-UnattendedJoin_neutral in the Answer File pane
  4. Expand Identification
  5. Set JoinDomain to the name of your domainjoindomain.png
  6. Highlight Credentials
  7. Set Domain to your domain
  8. Set a username and passworddomain credentials.png

Set System Locale

Microsoft-Windows-International-Core
  1. Right-click wow64_Microsoft-Windows-International-Core
  2. Choose Add Setting to Pass 7 oobeSystem…international-core-pass7.png
  3. Highlight wow64_Microsoft-Windows-International-Core in the Answer File pane
    1. Set InputLocale to en-US (or your country code)
    2. Set SystemLocale to en-US
    3. Set UILanguage to en-US
    4. Set UserLocale to en-USset-locale.png

Set The Out Of Box Experience (Bypass Setup Screens) And Create A Local Admin Account

Microsoft-Windows-Shell-Setup (again on a different Pass)
  1. Right-click amd64_Microsoft-Windows-Shell-Setup_neutral
  2. Choose Add Setting to Pass 7 oobeSystem…shellsetup-pass7.png
  3. Expand Microsoft-Windows-Shell-Setup_neutral in the Windows Image pane
    1. Right-click OOBE
    2. Choose Add Setting to Pass 7 oobeSystem…oobe-pass7.png
  4. Expand Microsoft-Windows-Shell-Setup_neutral in the Answer File pane
  5. Highlight OOBE
    1. Set HideEULAPage to true
    2. Set HideLocalAccountScreen to true
    3. Set HideOEMRegistrationScreen to true
    4. Set HideOnlineAccountScreens to true
    5. Set HideWirelessSetupInOOBE to true
    6. Set NetworkLocation to Work
    7. Set ProtectYourPC to 1
    8. Set SkipMachineOOBE to true
    9. Set SkipUserOOBE to trueoobe-bypass.png
  6. Expand UserAccounts in the Answer File pane
  7. Right-click LocalAccounts
  8. Choose Insert New LocalAccountinsertnewaccount.png
  9. Highlight LocalAccount
    1. Set Description to Local admin account
    2. Set DisplayName to a username of your choosing
    3. Set Group to Administrators
    4. Set Name to the same as the usernamelocaladminaccount.png
  10. Expand LocalAccount
  11. Highlight Password
    1. Set Password to a password of your choosingset-password.png

Save Your Answer File

Save your answer file somewhere safe (preferably on a network share).  You will need to copy it to a different computer later on.

Install Windows 10 On A Spare Computer

Now you need a spare computer that you can install Windows 10 on.  You can customize Windows after it is installed (the settings will be captured and applied when you deploy the image), but it’s usually safer and a better practice to apply any settings through the answer file.

It’s easier to add customizations to a clean image rather than one that has already been customized, so I recommend leaving everything at the default and just moving on to the next step.

Copy the Unattended.xml File to the spare computer

Copy your Unattended.xml answer file from the previous step into C:\Windows\System32\Sysprep.

Run sysprep.exe using the Unattended.xml file

Open an administrator command prompt and enter these two commands:

cd C:\Windows\System32\Sysprep
sysprep.exe /generalize /oobe /unattend:Unattended.xml /shutdown

This will apply your answer file and shutdown the computer.  The next time you start it up, it will be as if you just deployed it to a new computer so it will apply all your answers and do a fresh install.  So it is important that you do not start the computer until you are ready to boot it into WinPE to capture the image (in a state before it has been booted).

Create A WinPE Disc Or Bootable USB Drive

Remember, the computer you just installed Windows on needs to stay powered off until this disc gets created.  So you should be running these commands from the computer you installed the WADK on.

  1. Right-click the Deployment and Imaging Tools Environment
  2. Choose Run as administratordeployment-imaging-tools.png
  3. Enter the following commands

The command below will copy the WinPE files to the hard drive so you can (optionally) customize them, but for this guide, leave everything as it is.

copype amd64 C:\WinPE

Next you can do one of two things:

1. make a bootable USB drive:

MakeWinPEMedia /UFD C:\WinPE F:

2. make an .iso file, which you can burn to a CD:

MakeWinPEMedia /ISO C:\WinPE C:\WinPE\WinPE.iso

If you made the .iso, you will need to burn it to a physical disc.  If you made the USB drive, you can move just move on to the next step.

Boot The Computer To WinPE After It Shuts Down

Now that you have either a bootable CD or USB drive that has WinPE installed on it, you need to boot the test computer to that.

Capture The Image To A .wim File Using dism

Insert the CD or USB stick into the computer you ran sysprep on.  You will need to boot to one of these devices (instead of the hard drive).  This can be adjusted in the BIOS, but there is also sometimes a function key you can press that lets you choose what device to boot to on-the-fly.  It’s different for every machine, but if you are reading this far, you probably know how to do this.

Once booted into the WinPE environment, you will be presented with a command prompt.  You will need to run the following commands to capture the image.

First, open the diskpart program

diskpart

Your prompt will change and the commands you enter now will be for assigning a drive letter to the partitions so you can capture them into an image file.

First, select the disk

select disk 0

Select the first partition (the small reserved partition Windows creates) and assign it a letter

select partition 1
active
assign letter=r

Next, select the main Windows partition.

select partition 2
active
assign letter=c
exit

You will now return the regular command prompt.  You can now use the dism tool to capture the images.

It’s most useful to save the image to a network share, but you can save it to another USB drive attached to the computer.  So first, mount a network share and assign it a drive letter.

net use j:\ \\server\share /user:username "password"

Now, you can save both partitions to their own image file:

Dism /capture-image /imagefile:j:\w10reserved.wim /index:1 /ApplyDir:r:\
Dism /capture-image /imagefile:j:\w10.wim /index:1 /ApplyDir:c:\

Deploy The Image To A Computer Using dism

Deploying the images is a similar process, but you will be using diskpart to wipe the hard drive so you can deploy a fresh image.

Run these commands (once you are booted into WinPE) to deploy the image:

diskpart
select disk 0
clean
create partition primary size=500
select partition 1
active
format quick fs=ntfs
assign letter=r
create partition primary
select partition 2
active
format quick fs=ntfs
assign letter=c
select partition 1
active
exit
net use j: \\server\share /user:username "password"
Dism /apply-image /imagefile:j:\w10reserved.wim /index:1 /ApplyDir:r:\
Dism /apply-image /imagefile:j:\w10.wim /index:1 /ApplyDir:c:\
copy /Y j:\SetupComplete.cmd c:\windows\setup\scripts\SetupComplete.cmd

Notice the last two commands (these optional).  You can create and store a file on the network share named SetupComplete.cmd, which will run when the computer is finished being imaged.

I typically just put one command in it, which removes the Unattended.xml file (sensitive information in this file is already obfuscated, but it’s nice to remove it anyway).

del /f %windir%\system32\sysprep\unattended.xml

Note that you can build this file into the image, but this method is more useful if you want to change the commands that run at first boot.

Now, just type wpeutil reboot and your computer will start up to a fresh install of Windows!

(Optionally) Add Drivers To The .wim File

You may find that some computers need a special network driver or storage driver to complete the imaging successfully.  If this is the case, you can add a driver to image.  Be careful not to add too many or the image will get too big and won’t load since it runs from RAM.

Go back to the step where you copied the WinPE files to the C:\ drive.  Now, instead of creating the install media (and .iso or USB drive), run this command instead to mount the image to the local filesystem:

Dism /Mount-Image /ImageFile:"C:\WinPE\media\sources\boot.wim" /index:1 /MountDir:"C:\WinPE\mount"

Then, add your driver (replace the file path with the path to your required driver):

Dism /Add-Driver /Image:"C:\WinPE\mount" /Driver:"C:\Somefolder\driver.inf"

Now, commit your changes and unmount the image:

Dism /Unmount-Image /MountDir:"C:\WinPE\mount" /commit

You should now be able to create your media same as before:

1. make a bootable USB drive:

MakeWinPEMedia /UFD C:\WinPE F:

2. make an .iso file, which you can burn to a CD:

MakeWinPEMedia /ISO C:\WinPE C:\WinPE\WinPE.iso

42 Replies to “How To Image A Computer With Windows 10 Using dism”

  1. When I try to ACTIVE a partition I get “The selected disk is not a fixed MBR disk.” ACT command can only be used on fixed MBR disk. Not sure if this matters but my windows 10 enterprise boots with UEFI and I checked regedit my WinPE is booted in UEFI.

    Did I miss a step?

  2. Is it necessary to use 2. computer to apply answer file and capture there ie. isn’t there a way to configure a image offline in one of microsoft kits and save it to image file after configuring? Thanks for great guide!

    1. Yeah, you can make a CD and boot to that using a single computer. In large environments though, it is typically easier to use a network share since it scales better.

  3. With Windows 10 UEFI do you only need to capture the C: and R: partiton and then re-create those when it is time to deploy image to new computer, or are there other partitons I should be making and capturing/deploying?

    1. I haven’t done it yet on an UEFI computer, but I know you need a different script for it…trying to find it in Microsoft’s KB may take a while.

    1. Do you have a screenshot? I’m not sure what Windows 10 on 1 means. If you’re using dism, the image should just be applied automatically; there’s no real restore happening–you are deploying a generic image that is built up when you start the computer.

    2. So you are getting the option of booting up into “Windows 10” and then the option for “Windows 10”. So two of them correct? One will boot fine and one won’t Correct? This is how I fixed it.

      Run cmd prompt as admin, type bcdedit enter. This will give a detailed list of all operating system entries currently in the bootmgr.dll. Write or copy the alphanumeric string to the right of “identifier” for the entry you wish to delete.

      Type the command “BCDedit /delete [IDENTIFIER]”, minus quotes, replacing “[identifier]” with the alphanumeric string of the entry you wish to delete. Press “Enter” to complete, and reboot to test the settings. Repeat this command for any other entries you wish to remove.

      Example: bcdedit /delete {b5c086a9-359d-11e0-ae5e-82634f96898b}

  4. It must be to do with using imagex to capture and apply and the bcd commands. for the love of…. I got it working perfect and it was either during the imagex apply or the bcdboot setting but I CANT seem to recall what switch made it work! 2 device now and its not working like it just did on this other device… all same model/settings… er!

  5. Yeah…that’s part of the reason I made this post, was all the times I got confused, I had to document it here so I could come back and follow my own instructions.

  6. Hi,

    I’m not able to run the sysrep.exe cmd; I get the “file is being used by another process” whatever message. Any clue on that?

    1. I just ran into this. There’s a box that comes up when your in audit. Can’t remember the name of it but it has a drop down list that gives you options to reboot in audit mode , sysprep mode, OOBE mode and I think something else. Close that by clicking on the X in the upper right corner. Wait about 30 seconds to make sure the process shuts down. You can then run sysprep from the command prompt.

  7. sysprep.exe /generalize /oobe /unattend:Unattended.xml /shutdown

    I’m having issues with this command in Win 10 Ent. Every time I try it gives me a pop up saying Usage: syspre.exe..(optional Arguments).. If no command line arguments are provided, a graphical interface is used to select the desired sysprep operation.

    No matter what order I put the arguments I get the same unless I leave out unattended:Unattended.xml then it just does basic oobe… Not sure what is wrong.

    1. You’re probably not in the sysprep directory via the command prompt. You can either cd to that directory or just put in the full path the Unattended.xml file.

      1. I was definitely in the sysprep directory. The folder path for the file is –
        C:\Windows\system32\sysprep\Unattended.xml
        CMD Prompt – C:\Windows\system32\sysprep…
        I even tried the direct path in the CMD from E the flash drive that it moved over on – But you’re right using the full C drive path name seemed to work. No idea why.

  8. -“Now, you can save both partitions to their own image file:
    Dism /capture-image /imagefile:j:\w10reserved.wim /index:1 /ApplyDir:r:\
    Dism /capture-image /imagefile:j:\w10.wim /index:1 /ApplyDir:c:\”

    What does /index:1 and /applydir:r do? I’ve been trying to run this cmd but I keep getting an Error: 87
    The /index option is not recognized in this context.

    All forums I’ve visited only show the index and applydir arguments being used with the dism/apply-image cmd.

    1. It applies the image to the partition.

      The index is basically a version of Windows. Run dism /get-wiminfo /wimfile:install.wim and you will see the index numbers. The .iso usually contains several different versions. But the Mircosoft System Reserved partition doesn’t have a different version. In fact, I recently learned you can make the MSR partition via diskpart, which is how I do it now; especially for EUFI machines.

      1. This is the only cmd that worked for me –

        Dism /Capture-Image /ImageFile:j:win10.wim /CaptureDir:C:\ /Name:Drive-C

        I got it from Microsoft’s TechNet page and it actually seemed to function just fine. The only problem was my unattended file failed after reboot… I googled the error and found I had to launch cmd line and open regedit and change the childcompletion reg key from 1 to 3 to boot back into windows on the new machine. Something in the unattended file isn’t right. It may be the domain join; which I think I’ll just skip as I can do that after I’ve imaged the machines.
        Of course that was just a test on an old tower that used MBR boot and now I need to make it work with Newer SSD laptops that run EUFI boot and make sure my wim is customized properly.

        1. You shouldn’t need to do any registry hacks to get the job done. The Unattended file is very, very picky and one wrong syntax will fail the whole thing, which you don’t know about until you start up the machine. Keep the Unattended file as simple as possible and then use the first boot script to finish customizing.

  9. Hi,

    Thanks for this very useful info. Will this work on a UEFI system though? I am trying to push windows 10 image on a T560 thinkpad, its not booting. Only way I can make it work is to boot windows 10 vanilla from a USB let it create the partitions then only format the main partition then apply the image.

    1. Not as-is. The script needs some modification as one of the other commenters pointed out. I’m still working on refining my version into something that’s easy for others to understand as well.

  10. If I am cloning 600 computers this summer with this method, what do I set the computer name to. Should I choose not to join the domain also.

    1. I struggled with the computer name quite a bit as you can’t hardcode it or you’ll end up with a bunch of computers trying to claim the same name. Especially when you’re on a domain, that won’t fly. I settled on using %COMPTUERNAME%, which will let Windows decide the computer name. You can always rename them afterwords.

      I’m sure there is also a way to use some other variables, but I never looked too deeply into it.

      1. We also have a disk duplicator 1 to 11. Which we used in previous summers. At what step could I use that also. I assume after running wpeutil. Shutdown instead of reboot. Then use disk duplicator. I have 240 of the same model machines and this could be quicker. Pro: quicker, Con: taking HDD of computers and reinstalling them, may not be. Maybe a wash in time.

        1. If you wanted to use some sort of cloning software, you would want to capture the image after running sysprep and shutting down the computer–same as you would with WinPE.

          If you have to take out the hard drives, you may as well learn WinPE and throw it on a few flash drives or CDs and then just boot to that.

          It’s also possible to create a PXE server that will boot into WinPE so you can just set your computer’s boot order to boot to the network first and then it will. That was what actually worked best for me, but it took some hacking to get there.

          I used a FOG server modified to boot only into WinPE using wimboot…another post for another day.

          1. More about targeting applications by Department than drivers. So the base image is for the initial setup. Then I install all the apps for a specific set of computers, then make an image and clone the rest.

  11. I am on Enterprise Build 1607. I had to modify the directions a bit.

    I had to list partitions to get the proper system and windows primary partition and change the number in the capture steps. Also, Letter=C was already assigned. The capture command at this level is different.

    Dism /Capture-Image /ImageFile:c:\my-windows-partition.wim /CaptureDir:C:\ /Name:”My Windows partition”
    Dism /Capture-Image /ImageFile:s:\my-system-partition.wim /CaptureDir:R:\ /Name:”My system partition”

  12. Also Some of the Answer file stuff said it was no longer valid in this version. I am creating base image, then using that to create more targeted images. My goal is clone 600 computers, I can answer a few question at boot. I left the license key and that’s it. Each image will be based on the model of computer I am imaging and software needs. I think I will have 5 or 6 images.

    The article helped a lot. Just needed to experiment a little.

    1. You can do it that way, but maintaining a single thin image is much easier. You can then use a source-controlled first boot script to handle the rest of the machine provisioning.

      If it’s drivers you are concerned about for the different models, you can use the dism command line tool to add the drivers directly into the image. It’s much more efficient and easier to administer because you only need to really worry about adding new drivers and then updating the first boot script.

  13. This is awesome. One question, does the entry called ComputerName successfully prompt for a computer name and then apply this name when the computer is joined to the domain? That is what I’m after. I made a mistake in the timezone entry so the execution of my unattend file failed for that reason. I ran validate the unattend file which passed with the value ComputerName in the ComputerName field. But I’m reading everywhere including official Microsoft documentation that the computername prompt is removed from OOBE. No one else says to use ComputerName for the computer name, they just say no it won’t prompt you for a name. I would just like to confirm that this works before I try my third and final sysprep attempt on this golden image. Thanks.

    1. The last build I tried on was Windows 10 v1607.1, and it seemed to work there. I know lots of the keys were deprecated, but the basics mentioned in this article still work for me.

  14. The word Computername above in italics actually was typed in with asterisks (*) on both sides of the word Computername. My entry in the field in my unattend file generated by WSIM has the asterisks before and after the word ComputerName. Just wanted to clarify…

    1. I use %COMPUTERNAME%, which generates a random (or seemingly random) computer name. I know in some software called Altiris, you were able to specify a base computer name and append some numbers to it, but I’m not sure how it is accomplished. Using %COMPUTERNAME% ensures a unique name, which is important when joining a domain. The name can be changed later via a script, which is how I handle it.

  15. These instruction to create and get the image were right on the nose..until the last 2 commands. I could not get the image to work and will end this post with what I used for NET USE….and then DISM commands.
    A note needs made that each time you attempt an image..but it fails about….you then log in as a “new local user” but your Unattended.xml file will be gone. So you need to save it off to a USB so you can put it back in the Sysprep folder after each unsuccessful Sysprep attempts. Also..you only get 3 attempts before Sysprep errors out for too many uses. There is a manual reset to change registry entries call Generalize and rearming and a few others.

    Here are what I used in my last 2 steps that worked on a Windows 10 PE created DVD.

    Net Use j: \server\share\ /user:username@domain “password”

    dism /Capture-Image /ImageFile:j:\win10reserved.wim /CaptureDir:r:\ /Name:”Windows 10 reserved”

    dism /Capture-Image /ImageFile:j:\win10.wim /CaptureDir:c:\ /Name:”Windows 10 full copy”

    ***You can put whatever text you want to call the image between the quotes.

    1. Are you referring to these commands?

      Dism /capture-image /imagefile:j:\w10reserved.wim /index:1 /ApplyDir:r:\
      Dism /capture-image /imagefile:j:\w10.wim /index:1 /ApplyDir:c:\

      If so, you may need to modify the index, the paths, or filenames to match your environment. Or in your case, you may have not needed the index.

      The behavior you are describing when Unattended.xml gets removed is the expected behavior. You don’t need to log in as a local user, you can log in under Audit Mode to verify any settings. You do this by pressing CTRL+SHIFT+F3. It’s a very confusing process.

      And you do indeed only get three tries under the method you described. You can change this behavior by setting another key in the unattended file called SkipRearm.

      All of these things are Microsoft’s way of doing things. It’s the reason I made this post, because I never understand what the Microsoft engineers are thinking and they can’t seem to make up their mind about how to implement something.

Leave a Reply