Unattend.xml and Customsettings.ini

When I first started researching on the Microsoft Deployment Toolkit I came across the Customsettings.ini and Unattend.xml files being mentioned in various forums and posts online but, being new to the subject, the purposes of both files wasn’t immediately clear to me.

I know many people have compared the two online but I still wanted to write my own post here, with the goal of making it easy to understand the purpose of the two files for people who are just getting starting with MDT.

First though, I think it’s best to take a step back and give a short overview of the Microsoft Deployment Toolkit and the deployment process in general before I start talking about these files (especially since it’s aimed at someone new to the subject).

If you are already familiar with how the Microsoft Deployment Toolkit works just skip the bullet points below. So, in my own words, here’s how MDT works:

  • MDT 2010 is a free tool from Microsoft which can be used to automate the deployment of Windows operating systems with minimal to no user interaction
  • MDT uses a Deployment Share which contain all the necessary files and components required in your deployment environment, such as Windows images, device drivers, Windows updates and service packs and applications
  • You create Task Sequences within MDT which carries out a sequence of pre-determined steps on a client PC to accomplish a given task. For example, you can have a Task Sequence to capture a Windows 7 image and another Task Sequence for deploying it to a computer
  • MDT produces a bootable image which can be used with Windows Deployment Services to PXE-boot a computer to start the deployment process. Alternatively, you can also create a bootable USB or DVD to boot computers
  • Once the computer is booted using the bootable image a Deployment Wizard takes over the deployment process
  • You select a Task Sequence from within the Deployment Wizard to execute the given task associated with the task sequence
  • Selecting a Task Sequence to deploy a Windows 7 image, for example, will require you to provide some key information within the Deployment Wizard. For example, you will need to provide the keyboard language, computer name, administrator password, etc

Now, the deployment process isn’t automated if you have to manually enter the information in the Deployment Wizard, right? Exactly. This is where the Customsettings.ini and Unattend.xml files come in.

Unattend.xml is the unattended answer file which is applied during the deployment process to provide the information you would be otherwise required to enter manually when installing an OS. By providing the answers in a XML file beforehand and applying it to the deployment process you eliminate the need to enter them manually.

Much of the settings you include in Unattend.xml can also be set in the Customsettings.ini file, but with one exception. Customsettings.ini applies specifically to the Deployment Wizard. Not only can you provide the information required in the deployment wizard but you can also skip the wizard panes, thereby automating the process.

Also, each Task Sequence has its own Unattend.xml file associated with it, whereas Customsettings.ini applies to the Deployment Share globally. It is entirely possible to enter all the required information in Customsettings.ini without touching the Unattend.xml file associated with a Task Sequence.

Consider this scenario. You have two task sequences, one to deploy a 32-bit Windows 7 image and another one for a 64-bit image. In both cases you need the client PC’s to join the domain. You can automate the domain joining process using the Customsettings.ini file without having to go into the Unattend.xml files associated with both the task sequences to add the settings individually. In this scenario the settings within the Unattend.xml files are dynamically injected at deploy time by reading the properties from the Customsettings.ini file.

So there you have it, my own comparison of the two files in a MDT deployment environment. I hope someone does find this useful. I’d love feedback from anyone reading this, and hear any thoughts on the post you may have.


12 thoughts on “Unattend.xml and Customsettings.ini

  1. Good post m8…u r post reached me. Its clear now..thanq…..
    So, we can add inject the drivers and answer files during deployment using the windows SIM as well. But MDT fives u much greater control while deploying and is scalable.

    So, When i sysprep a thick image say u have three things here…..
    Task sequence
    Customsettings.ini. Which setting overrides the others…..???…. Can u pls make that bit clear for me…??!!

    • Hi, thanks for reading the post.

      I can confirm the customsettings.ini overrides unattend.xml file

      I just ran a test deployment in my Lab where the language in the customsettings.ini was set to en-US while the unattend.xml file had en-GB. I checked after deployment and the target computer had its language and keyboard set to US.Therefore customsettings.ini took precedence in this case.

      Hope that helps.

    • 1. Unattended.xml goes above nothing
      2. CustomSettings.ini goes above Unattended.xml
      3. Database goes above CustomSettings.ini and Unattended.xml
      4. Task Sequence Variable, goes above Database, CustomSettings.ini and Unattended.xml

  2. Thank you very much. This was exactly type type of overview of these two files I was looking for. This type of info has been hard to find.

    • The purpose of these two files wasn’t clear to me to begin with and I had to make sense of it all from various sources. That’s why I wrote this post to help people get their heads around it.

      I’m glad you found it useful. Thanks again for visiting.

  3. Awesome. Thanks so much for your post. It is a huge clarification in my MDT/Deploymenet/Sysprep/Imaging researches :D

  4. Thanks you very useful info in my learning journey with MDT, custom image building using different methods etc..

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s