MDT – Working towards Zero Touch Installation


The aim of this is to create a deployment that once started will finish without any further intervention.

Step 1 – Create the Perfect task Sequence

Before we start the process, we assume that you have tested your deployment process and you are able to deploy operating system as required. In this step, we assume that you want to fine tune your deployment.  We  assume that you have  slightly modify your task sequence in order to automate the following settings

  • Automatically generate the computer name (based on a naming conventions)
  • Automatically set the screen resolution
  • Add a build number to the system
  • Install applications by using Applications bundle approach
  • Automate the Join Domain Process

After fully testing your deployment process and you are confident that the process is working as expected and that the scripts and applications are installed correctly, you can move to the next phase which consist of getting rid of the deployment wizard when booting the target machine in pxe mode. We will mention later in this post, the changes we have made in order to have the perfect task sequence…Keep reading….

Step 2 – Control the Deployment Wizard

To hide the Deployment wizard page and have a fully automated process, you will have to edit two files

  • Bootstrap.ini
  • CustomSettings.ini

These two files control the way the deployment Wizard will behave.  Let’s have a look first at the bootstrap.ini

Bootstrap.ini file

We will need to add some information into this file in order to

  • skip the Welcome page you see when starting the deployment wizard
  • skip the credential page needed to connect to the Deployment Share
  • configure the keyboard locale in the WinPE environment.

To have these settings configured, you will edit the bootstrap.ini file. To access the file, you can simply open your Deployment Workbench Console, navigate to your deployment share, right-click on it and select properties.


In the properties page, click on the rules tab. At the bottom, click on the button Edti BootStrap.ini

and it should look like the screenshot below



This is quite easy

CustomSettings.ini file

The customSettings.ini file will need to be populated with more information.  Basically, for each Wizard page displayed during the deployment process, you can decide to skip it or to display it.  We want to have a real unattended deployment scenario, we will thus hide all the Wizard page.  In our scenario, we are deploying OS to new computer (New Computer scenario).  We have configured the task sequence we want to use accordingly.  The screenshot below shows you the content  of our CustomSettings.ini file.




I think that the content is quite self-explanatory. But we can quickly go through each main sections

  • In the section 1, we have simply set the parameters to customize and brand the Progress Bar dialog box display during the deployment process
  • In section 2, we have used the variable Skip<%Page%> in order to hide Wizard pages during the Deployment.  In the screenshot, you can see that we are skipping the Product key page, the Admin password page, the Bitlocker page and so on
  • In section 3, we are configuring the keyboard layout to use and the time zone to be used. Because this has been configured through the customSettings.ini file, we do not need to have the page display and we simply skip it by setting the value of SkipTimeZone to Yes
  • In Section 4, we have specified that no user data or packages page will be displayed.
  • In Section 5, we have configured the MDT Server to hide the Task Sequence page. Note that we have used the task id (and not the display name of the task as described in numerous blog.  We have seen better results by using the ID instead of the display number.  If you have used the display name, you might notice that the target machine is rebooting without executing the task.  If you use the ID, it’s seems that’s working better (at least for us)
  • In Section 6, we have configured the MDT Server not to prompt for the computer account.  Here, we have decided to use a PowerShell script to set the computername instead of using the OSDCOMPUTERNAME Variable
  • In the last screenshot (above), we have configured the MDT Server in order to hide the summary page (skipSummary=Yes).

This is the content of our CustomSettings. ini file.  You can see in the comments that some settings have been moved to the task sequence.

Task Sequence configuration

In order to have a fully automated deployment process and some level of flexibility, we have configured a series of operations inside the task sequence instead of using variables within the CustomSettings.ini.  This approach has been preferred in order to provide more flexibility and make the task the most common one which would fit in most scenarios.

As already mentioned, we have included in the task sequence the following operations

Set best Screen Resolution Settings

As described in this post, we have added a step in our task sequence in order to automatically detect the best screen resolution to be set during the deployment process. This assume that you have injected the appropriate graphic drivers within your MDT infrastructure.


Set computer name automatically

As described in this post in details, we have also configured this operation within the task sequence.  We have created a simple powershell script that would set the computer name during the deployment process based on the naming conventions to be used.  The Task sequence would look like this


Note : You can have a look at this post to see how to Integrate PowerShell Script in your task sequence

Install Applications using Bundles

We have described the usage of application bundles in this post.  We have configured the task sequence to use a bundle because again it’s ease the lifecycle management of the applications to be deployed.  You can update the application bundle without need to edit your task sequence.


Join automatically the computer into the domain

In this post, we have seen how you could automate the join process.  We could have used variables within the CustomSettings.ini file but again in order to have a more flexible solution we have decided to move this process in the task sequence.  You can join the computer into a domain using a small PowerShell script or you can even perform offline Domain Join operation if required using again a simple PowerShell Script.





No Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

MDT – Joining a Computer to a Domain Using PowerShell

Using PowerShell scripts within a task sequence provides more flexibility than using the CustomSettings.ini file to join a computer to a domain. The parameters of the CustomSettings.ini file are common to any deployment you perform. That’s why creating a custom PowerShell script to join your domain will be customize to …

Task Sequence Tasks Explained

This document explains the tasks that you will find in standard task sequence. Initialization > Gather local only – gathers deployment configuration settings from local sources that apply to the target computer [ZTIGather.wsf] Validation > Validate – verifies that the target computer meets the specified deployment requirement conditions. Such as …

How MDT uses XML to install Applications

Have you ever thought about what actually happens when you import applications into your MDT environment? How does the task sequence know what application to install? How does it know what command-line arguments to specify during the application install process? Technically, as a user, all that is required of us …