MDT Lite Touch Driver Management

In MDT Lite Touch, there are two types of drivers to worry about when deploying Windows. There are drivers for Windows PE (the boot image) and there are drivers for the Windows Operating System that you deploy.

Driver management for the boot image is pretty straight , but driver management for the Operating Systems that you deploy is more complex. The real answer is it depends. To simplify I have broken down drivers for the Windows Operating system in to three core scenarios (see later in this post). But first, let's start with the boot image drivers.

Drivers for Windows PE (the boot image)

The boot image you use for deployment is based on Windows PE (a subset of the Windows 10 operating system). For the boot image you need at Nic and Storage drivers at minimum, but sometimes you need to add other drivers as well (such as mouse drivers for remote cards like ILO etc.)

The good thing about Windows PE is that it supports the same hardware as Windows 10, so if you are lucky you don't need to add any drivers at all to it. But in this article you find guidance if you need to add any driver. You also need to set the scratchspace in Windows PE to increase the temporary storage that is used when the Windows setup engine is injecting drivers.

To be successful with boot image drivers in MDT Lite Touch I recommend that you do the following

  • Create two folders in Out-Of-Box drivers, name the folders WinPE 5.0 x86 and WinPE 5.0 x64.
  • Import any needed x86 drivers into the WinPE 5.0 x86 folder, and any needed x64 drivers into the WinPE 5.0 x64 folder. Note:  You should only use Windows 8.1 drivers for the boot images, even if you plan to deploy Windows 7 SP1 with MDT 2013 Lite Touch.
DriversInWinPE
WinPE drivers imported.
  • Create two selection profiles, one named WinPE 5.0 x86 (where you select the WinPE 5.0 x86 folder in Out-Of-Box drivers), and one named WinPE 5.0 x64 (where you select the WinPE 5.0 x64 folder in Out-Of-Box drivers.
  • Then configure the deployment share properties to use the correct selection profile. In the Windows PE x86 Components tab, in the Driver Injection area, select the WinPE x86 selection profile. Do the same for Windows PE x64 Components tab, but select the WinPE x64 selection profile.
  • Also in the deployment share properties, in the Windows PE x86 Settings tab, in the Lite Touch Boot Image Settings area, set the Scratch space size to 128, do the same in the Windows PE x64 Settings tab.
DSProperties
Deployment Share configured to use the WinPE 5.0 x64 selection profile.

Drivers for Windows Operating systems

To simplify things I recommend starting with one of three core scenarios when configuring drivers for MDT 2013 Lite Touch. The three scenarios are based on the size of the company, the number of operating systems being deployed, the level of control desired, and the number of hardware models.

Scenario #1 –  Total Chaos

This scenario has the following assumptions. This is for a small company, they are only deploying one operating system, say Windows 8.1 x64, and they have a few hardware models from the same vendor. The key things here are that they are deploying just one family of operating systems and that the hardware is from the same vendor. The reason is that the larger vendors do test compatibility among their own models per operating system family, so it's quite rare that a driver from one model will interfere with another driver.

Solution

For this scenario I recommend that you stick with the default simple PnP ID detection based method for drivers. Shorthand story is, just download and extract the drivers for each model to a folder, and import that folder into the Deployment Workbench.

AddedPred
Deployment Workbench with drivers imported for Scenario #1

Scenario #2 – Added Predictability

This scenario has the following assumptions. This is a small or midsize company, they are deploying multiple operating systems, say Windows 7 SP1 x64 and Windows 8.1 x64, and they have a few more hardware models but still from the same vendor. The major difference from the first scenario is that are deploying multiple operating systems. Since the default method is using PnP ID detection among all imported drivers we need to have a way of filtering the drivers so that only Windows 7 drivers are considered for Windows 7 SP1 deployments, and that only Windows 8.1 drivers are considered for Windows 8.1 deployments. The feature in MDT 2013 that we can use for this filtering is called Selection Profiles.

Solution

For this scenario I recommend that you use the default PnP ID detection based method with the addition of using selection profiles as a filter for the drivers. The configuration in MDT is that you first create two folders inside Out-of-box drivers, named Windows 7 x64 and Windows 8.1 x64. Then you import the drivers the correct folder in the Deployment Workbench.

After importing the drivers, you create a selection profile created for each operating system driver folder, and then configure the Inject Drivers action in the Task Sequence to use the correct selection profile.

Creating the Windows 8.1 x64 selection profile.
Configuring the Inject Drivers action to use a selection profile

Scenario #3 – Total Control

This scenario has the following assumptions. This is a small, medium or larger company, they are deploying multiple operating systems, say Windows 7 SP1 and Windows 8.1, they have many hardware models, and from multiple vendors. The major difference from the second scenario is that they are using hardware from multiple vendors, and the fact that they want more granular control of their drivers.

Note: This method is my personal favorite, because even if it takes some extra time to setup, I get complete control of the driver injection process.

Anyway, since there are multiple vendors involved, the testing and compatibility matrix between each model cannot be guaranteed if you base detection on PnP only. You need to be able to filter not only on operating system but also on a per model basis. Even though you technically could use selection profiles for this as well, this is not what they were designed for. There is another feature called DriverGroup that will help you do some more advanced filtering.

Solution

For this scenario I recommend that you don't use the default PnP ID detection based method, but instead use DriverGroup as a filter for the drivers. The configuration in MDT 2013 is that you first create two folders inside Out-of-box drivers, for example named Windows 7 x64 and Windows 8.1 x64. Then you create subfolders for each model you have. Then you download and extract the drivers for each model, and per operating system. Then import each per operating system folder and per model into the correct folder in the Deployment Workbench.

Please note that selection profiles and driver groups work together meaning if I have a selection profile including driver A, and a driver group including driver B, both drivers will be added. Most times you only want one or the other but they can be combined. When using drivers per model I recommend you to use the selection profile named Nothing for the Inject Drivers action. The real trick for this scenario is to name the driver folders according to the name of the model, then you can set the DriverGroup001 variable to %Model% in either the Task Sequence or in the rules.

Also, to avoid having issues with drivers not detected by plug and play within the folder (DriverGroup), I recommend forcing driver injection by changing the Inject Drivers action property to "Install all drivers from the selection profile". The property is a bit misleading, because it's also valid for driver groups, but the label does not really say that  🙂

Create the driver folder structure in Deployment Workbench.
Add the Set Task Sequence Variable action with DriverGroup001 set to Windows 8.1 x64%Model%.
Configure the Inject Drivers Action to use the "Nothing" selection profile.

Happy Deployment
/ Johan

About the author

Johan Arwidmark

5 2 votes
Article Rating
Subscribe
Notify of
guest
102 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
Andries
Andries
1 month ago

Hello Johan, this still works great! Thank you so much!

One question though, using the Total Control method; imagine we deploy a new device model and there aren't any model specific drivers for that model in MDT OoBD. Would it be possible to point that device to use, for example, a fallback selection profile with just basic drivers? Or any other way to handle drivers for devices that doesn't have any model specific drivers in MDT?

Shorty
Shorty
3 months ago

Hi Johan, we use the total control process. But we have a lot of devices, especially from Lenovo. For each model we import new drivers and now our "driver-database" is aprox. 50 GB big. But the modelname from Lenovo devices only change at the last 6 letters and the 4 at the beginning specify the "real" device. The last 6 characters are only defining if there is another soundchip, harddisk etc. Is there any chance that we can only import one driverpack for a model (ie 20N20009MB vs 20N2005UMB ) an let this use by MDT? In this case we… Read more »

Shorty
Shorty
3 months ago

Hi Johan, thanks for your answer. Where can we find this script? Can you please share it?

Adam D Guerich
Adam D Guerich
6 months ago

why are we applying the drivergroup and inject drivers pre-install for "OS drivers, and not post install?

Keven Vallance
Keven Vallance
11 months ago

I have a similar issue. W10 1909. I am using the total control process. Have the folders for each model we are using. However, only the HP 705 G5 SFF and Mini are failing with driver related issues. Regardless if I use the ONLINE or OFFline MDT. The issue is that the system reports back a inaccessible boot device blue screen at the point right after the drive is imaged. Saw the sad face. But when running the online, the no device found error happens. Downloaded what was supposed to be the newer hard drive files from HP site. NO… Read more »

Zay
Zay
1 year ago

Hi, so I downloaded your ModelAlias script. What do I set for the DriverGroup001 variable? The link shows to set the customsettings.ini as:
[Settings]
Priority=HardwareInfo, Default
Properties=MakeAlias, ModelAlias, MyCustomProperty

[HardwareInfo]
UserExit=ModelAliasExit.vbs
MakeAlias=#SetMakeAlias()#
ModelAlias=#SetModelAlias()#

Sam
Sam
1 year ago

Hi Johan

Can you kindly tell me how to inject multiple drivers for different models using a single Task Sequence.

I will really appreciate.

Sam
From UK

Sam
Sam
1 year ago

Do i need to update custom settings.ini file with DriverGroup001, DrivetGroup002

Please let me know
Sam

Sam
Sam
1 year ago

Do i need to create DriverGroup001,002 for each make n model OR one DriverGroup001 is ok for all models.

Let me know pls.

Sam

Julien Coudert
Julien Coudert
1 year ago

Hello,

I followed this tutorial :

https://developers.hp.com/hp-client-management/blog/automating-mdt-drivers-hp-client-management-script-library

Injection of the drivers is not working …

On this article the author use the value "Win10\%Product%" for the variable "DriverGroup001".

On your article you use "%Model%", I don't understand the difference …

Could you, please, explain it ?

Thanks and sorry for my poor English.

Allyn Jacobs
Allyn Jacobs
1 year ago

HI Johan,

Given that I know for example that Lenovo's use a totally different WMI location for the human model name, I am wondering if you would be willing to share that userexit script??? Or at least perhaps give a heads up on which vendors beyond Lenovo that we should be proactively working to ensure that we can get the best possible model name value…

Thanks!!

– Allyn

Andreas Pettersson
Andreas Pettersson
7 months ago

This is kind of interesting as Im trying to get my MDT 8456 to actually use %product% but it doesnt work. Too long path/names?

Andreas Pettersson
Andreas Pettersson
27 days ago

Funny part, it started working shortly after. I bet my customsettings.ini was messed up. I decided to go with a new *.ini and now its working

Andreas Pettersson
Andreas Pettersson
22 days ago

Thanks for your reply btw:) Can I also ask you and the others a question regarding MDT & joining domain? Somehow MDT has [default] prioritized before [MACAdress]. I have a VM which is suppose to join my domain, i can see that it defaults to join "JoinWorkGroup=<Workgroupname>" instead but why? Joining the domain works just fine by selecting that option instead but I want it automatically based on MAC. Or should I use TSID? In TaskSequence it has JoinWorkGroup ticked instead of JoinDomain Also when is it suppose to apply network settings from cs.ini? It reads the last section of… Read more »

MDT1.png
Andreas Pettersson
Andreas Pettersson
18 days ago

Thanks for your reply. This is more VM-related, I want every TS to join the domain for that specific VM. Its not a huge thing but I guess I can set TS variables in State Restore for each domain-variable needed? (Domainjoin, Domainadmin,password etc)

stoms
stoms
1 year ago

We are using the "Total Control" scenario to inject drivers for different models.
How can we combine this with selection profiles to inject common drivers e.g. for docking stations for all laptops?

I have created a selection profile that matches the name of the Make and Model and selected the model drivers as well as the Displaylink drivers.
Is this the correct way to do this?

Gianluigi
Gianluigi
1 year ago

Hi Johan, I own all your books and I used the "Total Control" scenario since MDT 2010.
However we are in the process of migration to Windows 10. So I bought your book DF vol. 6, that continue to present the "Total Control" as a feasible way to manage the driver, but it simply doesn't work with MDT version 6.3.8456.1000. Are you aware of any bug on this topic? Thanks! 🙂
I posted a topic here https://social.technet.microsoft.com/Forums/en-US/abfbb359-a216-4ea7-92db-c34b39f981e2/using-mdt-version-6384431000-drivers-not-injecting?forum=mdt&prof=required

Gianluigi
Gianluigi
1 year ago

Thanks Johan, luckly I don't have a lot of different computer models and all of them are from HP, so for now I'm using the scenario "Added Predictability" that fits just fine 🙂
Your help is very appreciated, I can forward you a BDD.log for check, maybe the solution is just under my nose…

Admin
Admin
6 years ago

You just add a "Set Task Sequence Variable" action from the "Add" menu, when editing the task sequence.

/ Johan

jasonrw
jasonrw
6 years ago

Hi,

Great tutorial! How do you get the "Set Drivergroup" step in your task sequence? I don't have it in mine. I just have "Inject Drivers."

Thanks

joebrug
joebrug
6 years ago

Absolutely right.. needed the Kernel Mode Driver Framework update in the reference image. Working great again, thanks Johan

Admin
Admin
6 years ago

You can check the setupact.log and setupapi.dev.log files, but most likely it's either missing kernel mode driver framework update in the reference image, or wrong drivers staged into the driver store.

/ Johan

joebrug
joebrug
6 years ago

Dell OptiPlex 7020.. Anyone deploying windows 7 x64 to this?
I tried deploying my current image to it, and as I thought, it booted and errored out because no network drivers, etc. I created an OptiPlex 7020 folder in Out-of-Box DriversWindows 7 x64 in MDT and imported the drivers from dell driver pack. Re-deployed the image to a desktop, now it errors out during "Setup is preparing your computer for first use" and just keeps rebooting after pressing OK. How do I determine what is failing?

Keke
Keke
6 years ago

Hi Johan,i used scenario #3 deployment solution. My OOBE is structured like your screenshot. I created 3 TS (Windows 7 x32, Windows 7 x64 and Windows 8.1 x64). In each TS i added Task Sequence Variable DriverGroup001 with value "Windows 7 x32%Model%" in the preinstall section just before Inject Driver. My understanding is : 1 – Do i need to add someting in my CS.ini to call my variable DriverGroup001 ?2 – Do i need to modify some script to call my variable DriverGroup001 ?3 – If i choose "Nothing" and "Install all drivers from the selection profiles" in PreinstallInject… Read more »

Admin
Admin
6 years ago

Nope, you cannot nest task sequences. However, if you have them open side-by-side, you can easily just copy and past actions between them.

/ Johan

RickB
RickB
6 years ago

Johan,

Thanks for the video.

Another question: do you know if there's a way to call/execute a task sequence from another task sequence? I have a 'template' task sequence that has about 25 driver packages with their corresponding WMI queries, and I'd like my OSD users to leverage that template task sequence from their OSD task sequence. The alternative would be that they would have to update their OSD task sequence with the contents of my template task sequence every time I add a new driver package.

yhttech
yhttech
6 years ago

Johan, I'm in the progress of building and testing a new MDT environment at my school. I've built the share, and started testing deployment to the different models we have. So far I have 6 machines tested, 5 Dells and one HP laptop model. The issue I'm having is with the HP laptop. The drivers were imported into the MDT environment in folder OSPlatformModel. Deploying to a Dell Vostro 260s works using this structure (The only other system that needed OOB drivers) – I've set my CS.ini file to start like:[Settings]Priority=Model, DefaultProperties=MyCustomProperty [Vostro 260s]DriverGroup001=Windows 7×86%model%DriverSelectionProfile=nothing [HP ProBook 6455b]DriverGroup002=Windows 7×86%model%DriverSelectionProfile=nothing The… Read more »

Admin
Admin
6 years ago

RickB,

Check this video: Most is still valid…

Inside Panther: Troubleshooting the Windows Setup Engine
channel9.msdn.com/events/TechEd/NorthAmerica/2011/WCL401

/ Johan

Admin
Admin
6 years ago

Pitchdown, try configure the inject drivers action to stage all drivers in the selection profile, and not the default pnp-id detection behaviour. Otherwise check dism.log and setupapi.dev.log.

/ Johan

RickB
RickB
6 years ago

Johan,

Thanks for the video, it's very informative and educational. Another question for you: do you know of any documentation available that shows a process diagram of the imaging process with the respective components (ie drivers, WinPE), and all the different log files and their location depending on where you are in the imaging process?

pitchdown
pitchdown
6 years ago

Added:
the missing drivers are :

[email protected][email protected]_06031028
ACPINTCF1A1
ACPIDLAC30023&36B2D927&0
ACPIINT33FB1

These are added to the MDT-selection profile, but not installed on the dell venue pro 5130 after installation with mdt2013.

Anybody who knows a solution for this issue?

pitchdown
pitchdown
6 years ago

Hello,
i also try to install the dell venue pro 5130 with MDT.
This is working well, except for 4 drivers (camera-drivers, and sensor-driver).
These drivers are added to MDT, but the hardware is not recognized after the installation.
When pointing to the driver-location manually , the hardware is installed right away.

Any idea why these camera and sensor-devices are not installed with the imported drivers?

Thx

Admin
Admin
6 years ago

For ConfigMgr you don't use the DriverGroup variable, you use conditions on each driver package that you add to the task sequence.

Check this video recording for details:

A Drivers Saga: Mastering Windows Deployment
channel9.msdn.com/Events/TechEd/NorthAmerica/2013/WCA-B301

/ Johan

RickB
RickB
6 years ago

Johan,

Thanks for the prompt reply. Can you tell me how the variable should be configured for driver packages instead of drivergroup when using SCCM? Thanks much. Maybe post an explicit article on MDT 2013 Zero Touch Driver Management with screenshots?

Admin
Admin
6 years ago

In ConfigMgr 2012 you use driver packages (instead of drivegroup), but yes, each package can (and should) have a condition to apply for a specific model.

/ Johan

RickB
RickB
6 years ago

Does the Total Control method work for SCCM 2012 SP1, and if so, are the steps/methods exactly the same, or are they any different?

davidlink
davidlink
6 years ago

A past user commented on Dell Venue 11 Pro tablets and finding that several different model names are reported when doing a WMI query such as Dell Venue 11 Pro 7130 vPro, Dell Venue 11 Pro 7139 vPro, etc. This will occur depanding on what Bios the Venue 11 Pro's are running. for example, prior to Bios A10 a Venue 11 Pro would return a wmi query of "Dell Venue Pro 11 7130", but after updating the bios to A10 or greater the wmi query will return Dell Venue 11 Pro 7130 vPro.

Admin
Admin
6 years ago

I haven't tried running the command line separately, it might work, but it would most likely be unsupported, and you might have to reference the packages in the task sequence anyway. I normally just add the driver packages to the task sequence with conditions.

/ Johan.

iburnell
iburnell
6 years ago

Hi Johan. I wonder could this be used with SCCM 2012 (with MDT 2012.1). I'm using the MDT Task Sequence and want to find a "cleaner" way to apply driver packages (total control) rather than having multiple steps in the Task Sequence for all the different models. MDT has already gathered the Make, Model and architecture so it would be greate to use drivergroup,driverselectionprofile to somehow identify the %make% %model% to "apply driver package" to install. I notice SCCM uses the command line osddriverclient.exe /install:packageidnumber, so what I'm trying to do is to automate through the use of the MDT… Read more »

DanVega
DanVega
7 years ago

I forgot to post back, but yes I just edited the Modelaliasexit script and it worked perfectly.

Admin
Admin
7 years ago

Normally you need both x86 and x64 since they are used also for refresh scenarios. As for bare metal deployment (except UEFI) an x86 boot image can deploy both x86 and x64 images, where as the x64 boot image can only deploy x64 images.

Shorthand, for bare metal deployments, if you only deploy x64, you only need an x64 image.

As for the dell cab files, you can do some house-cleaning before importing or after importing, it doesn't really matter even though I prefer to delete the x86 drivers (if possible) before importing.

/ Johan

hendrixs
hendrixs
7 years ago

Hi Johan, This is probably a silly question, but my deployment share currently has the tick box checked for both x86 and x64 platforms. If I am not deploying any x86 operating systems right now does that mean I can uncheck x86? I am only deploying x64 OS. Secondly, we are only deploying Dell machines so I use their CAB files for importing drivers. Now even though I only select the x64 sub-folder sometimes x86 drivers get imported along with them. I assume this is just because of how the CAB gets packaged and can't necessarily be avoided. If the… Read more »

Admin
Admin
7 years ago

ETA for Vol 5 is about a month 🙂

/ Johan

klarion
klarion
7 years ago

Maybe you're right. I need to check that modelalias script and test it. Btw. I read somewhere that you are writing a new book? Any release date yet? Deployment Fundamentals 4 was very good and I learned so much from that book. Keep up the good work!

Admin
Admin
7 years ago

Well, prompting won't make it easier for you in my opinion, better to fix the structure and use the modelaliasexit.vbsc script. Or to use additional WMI filter targeting drivergroup settings…

If you still want to pursue the wizard thing, the link I sent should help you.

/ Johan

klarion
klarion
7 years ago

Thanks for your answer. I'm finding it little hard to fully automate the drivergroup selection. We use lot's of Lenovo machines and Lenovo is using quite interesting naming standard for those machines and if we could manually choose the drivers during deployment it would be easier for us.

Admin
Admin
7 years ago

I have set up MDT for many customers using Lenovo, and when using the modelaliasexit script most Lenovo model problems goes away.

That script converts the Lenovo models into useful models, for example the "4178381" correctly translates into a "ThinkPad T420", and then I use the "ThinkPad T420" structure in the workbench.

/ Johan

klarion
klarion
7 years ago

Thanks for your answer. I'm finding it little hard to fully automate the drivergroup selection. We use lot's of Lenovo machines and Lenovo is using quite interesting naming standard for those machines and if we could manually choose the drivers during deployment it would be easier for us.

Admin
Admin
7 years ago

Hi Klarion,

First of all, there should be no need to ask for a drivergroup, but if you really want to add a custom pane (or modifying an existing) it takes a little bit of scripting… Here is a good post that is also valid for MDT 2013: blogs.technet.com/b/mniehaus/archive/2012/01/07/customizing-wizards-with-mdt-2012.aspx

You can also find some info in the Deployment Fundamentals – Volume 4 book.

/ Johan

klarion
klarion
7 years ago

Hi Johan,

I was asking earlier about setting the DriverGroup variable manually during Wizard pages. I looked from your DF4 book about customizing the LiteTouch Wizard but my scripting skill are not so good so I was hoping you could give some kind of example 🙂 I'm trying to make a Wizard page with drop down list that contains predefined values that can be selected and driver group would be set based on that.

Admin
Admin
7 years ago

If you want additional intelligence for model naming including Lenovo naming, check out the modelaliasexit.vbs script, originally written by the deployment guys. We also added an updated version to our Deployment Fundamentals Volume 4 book (shameless plug)

/ Johan

aillian
aillian
7 years ago

And so my spaces were stripped on that structure. Lame.

I found a good setup here: lh4.ggpht.com/-qFM1D2eGBX0/UDJCIGelagI/AAAAAAAAAEE/v-_WO1mxHQE/33C7326B3C730BA39458AE1C3B7F465C68B06149.png?imgmax=800

aillian
aillian
7 years ago

Corey – I see your confusion. I had the exact same question when I came to this blog post. Each new task sequence you run has it's own drivergroup001 setting, so you can point to whichever OS version you are wanting to install with the same DriverGroup001. So if you just set your task sequence variables exactly like in the blog post, you will be good. You can just copy needed drivers from one OOBE directory to another. That way as you get new models in you can just import and as long as you don't check the box that… Read more »

Babagunoosh
Babagunoosh
7 years ago

Howdy Johan, I just wanted to thank you and let you know that I have learned so much from reading your book and also from your site. Some background info: I am fairly new to MDT. I work for a school system and have in the last year inherited an older MDT server (Server 2008 R2 with MDT2012), and from what I can tell, was not setup the best way by my predecessor. I think he thought that just creating sub folders in the drivers section of the workbench – Out of Box drivers section was creating the total control.… Read more »

Admin
Admin
7 years ago

For me the per model approach (total control) has worked the best, and that method also make sure that just because you add or update drivers for another model, you don't break anything else.

/ Johan

absentspace
absentspace
7 years ago

Hi All, I'm wondering if there is a best practice for creating a practical test environment. It seems like every time I add a new model to our environment, something that works stops working and it takes a couple of days to get everything back in order. Background, we deploy predominantly HP notebooks with the occasional desktop and very rarely we deploy to another vendor's hardware. I started out using the total chaos method, but that made it increasingly difficult to identify problems when they occur, so i'm beginning to transition to total control, even though we predominantly deploy Windows… Read more »

Admin
Admin
7 years ago

The "Customizing the Windows Deployment Wizard" section begins on page 288.

/ Johan

klarion
klarion
7 years ago

Johan,

What is the page number? 🙂 I didn't notice it. I have the book.

klarion
klarion
7 years ago

Johan,

What is the page number? 🙂 I didn't notice it. I have the book.


>