I am often asked what the best way is to manage drivers with both BDD/MDT and ConfigMgr. With this in mind I thought I would create two blog posts dealing with this topic. The first post covered ConfigMgr and the second (this post) BDD/MDT driver management.
Please note this is not the only way to manage drivers, there are many different ways to manage drivers. However this is an approach that I have used many times with much success.
Before I get into the details I would like to provide a quick overview of driver management.
The first thing we must understand is the type of drivers that you need to manage. I place drivers into two categories:
1. NICE Drivers - Drivers that install using an INF file. 2. BAD Drivers - Drivers that must be "installed" - This could be a Bluetooth driver, finger print reader software or even DVD software that is specific to a particular model type. I also refer to these drivers as "Hardware based applications".
1. NICE Drivers - Drivers that install using an INF file.
2. BAD Drivers - Drivers that must be "installed" - This could be a Bluetooth driver, finger print reader software or even DVD software that is specific to a particular model type. I also refer to these drivers as "Hardware based applications".
Next we need to understand where drivers are used during the deployment process. There are two areas where they are used:
1. Host OS - These are drivers that are installed on the Host OS. 2. Boot images - These are drivers that are required by the MDT Windows PE boot images to enable OS deployment. The key driver types required are network and mass storage drivers.
1. Host OS - These are drivers that are installed on the Host OS.
2. Boot images - These are drivers that are required by the MDT Windows PE boot images to enable OS deployment. The key driver types required are network and mass storage drivers.
Finally we need to understand the options MDT 2008 provides for installing drivers:
1. Out-of-Box Drivers - Drivers are imported into the Deployment Workbench. During OS deployment MDT performs a PnP scan of the computer and chooses which drivers to install from all available drivers. You can filter drivers using groups. These tell MDT to only consider certain drivers when deploying an OS. 2. DRIVERPATHS - This is an option that is specified in the MDT deployment point rules. It specifies a path to a folder containing all of the drivers you would like to deploy to the computer. During OS deployment all files within that path are copied to the computer. No PnP scan is performed on the drivers contained in the folder.
1. Out-of-Box Drivers - Drivers are imported into the Deployment Workbench. During OS deployment MDT performs a PnP scan of the computer and chooses which drivers to install from all available drivers. You can filter drivers using groups. These tell MDT to only consider certain drivers when deploying an OS.
2. DRIVERPATHS - This is an option that is specified in the MDT deployment point rules. It specifies a path to a folder containing all of the drivers you would like to deploy to the computer. During OS deployment all files within that path are copied to the computer. No PnP scan is performed on the drivers contained in the folder.
So now that I have covered the basics lets discuss how I manage drivers.
I do not use out-of-box drivers to install "NICE" drivers on clients, I use the DRIVERPATHS method. I like the way that driver groups work but there is one scenario that driver groups does not cover. Devices that aren’t found by a PnP scan such as USB devices, multi level drivers and devices not enabled during deployment (like Bluetooth) will not be installed using the Out-of-Box installation method. You could use a combination of these methods to deploy drivers but I prefer to use one method that covers all drivers.
However I do use Out-of-Box drivers (with driver groups) to manage two key areas:
1. Drivers that must be added to Windows PE boot images (Network and Mass storage drivers) - MDT will dynamically inject these drivers into your Windows PE boot images. 2. Mass storage drivers that will be injected during image creation - MDT will dynamically inject mass storage drivers into client during image creation.
1. Drivers that must be added to Windows PE boot images (Network and Mass storage drivers) - MDT will dynamically inject these drivers into your Windows PE boot images.
2. Mass storage drivers that will be injected during image creation - MDT will dynamically inject mass storage drivers into client during image creation.
I create an application for each of the "BAD" drivers. These applications are then assigned with the correct hardware type using MDT database or deployment point rules. This allows me to selectively install the applications based on hardware type.
So now that you know how I manage drivers lets look at how I configure MDT to support this process.
The following steps must be followed to prepare the MDT infrastructure for driver management:
1. Create and a share folder on the deployment server. This folder will contain the drivers for each hardware type. I usually create a folder called models and share it as models$. 2. Create a driver group for mass storage drivers - I call this group "MassStorageDrivers" 3. Update the deployment point rules to assign the driver group to the StorageDriverSysPrepGroup property [Default] StorageDriverSysPrepGroup=MassStorageDrivers Note - All mass storage drivers in this group will be injected into the computer before running sysprep, so the drivers can be picked up after reboot. This can only be used when creating an image. 4. Create a driver group for Windows PE images - I call this group "WinPE" 5. Assign the Window PE driver group in the Windows PE tab of the Deployment Point. Note - This ensures that only drivers in this group are injected into the Windows PE boot image. This option is not available in LAB distribution points. It is important to note that LAB deployment points should only be used for creating images not deploying images. 5. Create a driver group that contains no drivers - I call this group "NoDrivers" 6. Ensure that the "NoDrivers" driver group is the only one selected in the driver groups tab of the Deployment Point. Note - This will ensure that only drivers that are specified using the DRIVERPATHS property are installed. 6. Update the deployment point rules to specify the DRIVERPATHS property [Default] DRIVERPATHS1=\\SERVERNAME\SHARE\%Model% Note - %Model% will be replaced by the WMI value gather during the MDT deployment process. All drivers for each hardware type will be stored in a folder corresponding to this value.
1. Create and a share folder on the deployment server. This folder will contain the drivers for each hardware type. I usually create a folder called models and share it as models$.
2. Create a driver group for mass storage drivers - I call this group "MassStorageDrivers"
3. Update the deployment point rules to assign the driver group to the StorageDriverSysPrepGroup property
[Default]
StorageDriverSysPrepGroup=MassStorageDrivers
Note - All mass storage drivers in this group will be injected into the computer before running sysprep, so the drivers can be picked up after reboot. This can only be used when creating an image.
4. Create a driver group for Windows PE images - I call this group "WinPE"
5. Assign the Window PE driver group in the Windows PE tab of the Deployment Point.
Note - This ensures that only drivers in this group are injected into the Windows PE boot image. This option is not available in LAB distribution points. It is important to note that LAB deployment points should only be used for creating images not deploying images.
5. Create a driver group that contains no drivers - I call this group "NoDrivers"
6. Ensure that the "NoDrivers" driver group is the only one selected in the driver groups tab of the Deployment Point.
Note - This will ensure that only drivers that are specified using the DRIVERPATHS property are installed.
6. Update the deployment point rules to specify the DRIVERPATHS property
DRIVERPATHS1=\\SERVERNAME\SHARE\%Model%
Note - %Model% will be replaced by the WMI value gather during the MDT deployment process. All drivers for each hardware type will be stored in a folder corresponding to this value.
Now that we have prepared MDT for driver management lets look at how these settings are used.
I find the simplest way to describe how I manage drivers is by example. The example I will use I perhaps the most common scenario in OS deployment, adding support for a new hardware model.
The process involves the following steps:
1. Create a folder for the new hardware type in the models folder. The models folder name must match the model value returned by WMI. I have found the simplest way to determine this value this is via a WMIC query. The following steps detail how to perform a WMI, ensure that these steps are run on the new hardware NOT the server:
1. Create a folder for the new hardware type in the models folder. The models folder name must match the model value returned by WMI. I have found the simplest way to determine this value this is via a WMIC query.
The following steps detail how to perform a WMI, ensure that these steps are run on the new hardware NOT the server:
a. Open a Command Prompt b. Type WMIC c. To determine the Model, type CSProduct Get Name
a. Open a Command Prompt
b. Type WMIC
c. To determine the Model, type CSProduct Get Name
2. Gather together all of the required "GOOD" drivers for this hardware type and place them in the new folder. I usually create a sub folder for each driver type. For example "Model\NIC" or "Model\Audio" 3. Create an MDT application for each "BAD" driver that must be installed 4. Associate the applications with the model using the MDT database or rules 5. If Required - Import mass storage drivers into the deployment workbench. Add these drivers to the "MassStorageDrivers" group during the import process. 6. If Required - Import network/mass storage drivers required for Windows PE. Add these drivers to the "WinPE" group during the import process. Note - The version of Windows PE used by MDT is based on Windows Vista. This means that you must to import Vista drivers to support Windows PE. 7. Update the deployment point. Note - If you have multiple deployment points then ensure that they are all updated. 8. Update any Windows PE boot images on WDS servers or DVD/CD media
2. Gather together all of the required "GOOD" drivers for this hardware type and place them in the new folder. I usually create a sub folder for each driver type. For example "Model\NIC" or "Model\Audio"
3. Create an MDT application for each "BAD" driver that must be installed
4. Associate the applications with the model using the MDT database or rules
5. If Required - Import mass storage drivers into the deployment workbench. Add these drivers to the "MassStorageDrivers" group during the import process.
6. If Required - Import network/mass storage drivers required for Windows PE. Add these drivers to the "WinPE" group during the import process.
Note - The version of Windows PE used by MDT is based on Windows Vista. This means that you must to import Vista drivers to support Windows PE.
7. Update the deployment point.
Note - If you have multiple deployment points then ensure that they are all updated.
8. Update any Windows PE boot images on WDS servers or DVD/CD media
Mass Storage drivers can be particularly troublesome to manage when deploying Windows XP and Windows 2003. The most recent release of MDT (March 2008) now includes support for injecting mass storage drivers before running sysprep, so the drivers can be picked up after reboot. This is a great new feature of MDT but it can only be used when creating an image. MDT CAN NOT inject drivers into an image that has already been syspreped.
So what does this really mean? If you have a new hardware type that requires a mass storage driver not currently supported by your image then you will need to recreate your image :(.
Note - ConfigMgr can inject drivers into an existing image.
Note - MDT will inject Vista and Windows 2008 mass storage drivers
So that's how I manage drivers .... simple :)
This post was contributed by Ben Hunter a Consultant with Microsoft Services New Zealand.
MWest,
Although the drivers are copied down to the C: drive, Windows will not know that they are there to be used. That is the purpose (or one of them) for the OEMPnpDriversPath key in the sysprep.inf file.
HTH,
Daniel
Hi Guys,
I have this setup and so far everything is looking great!
I've also noticed the drivers in my models% directory being copied over the c:\drivers location on the target PC. My drivers appear to be installing dynamically, as this article describes. That said, should it be copying the drivers to my c:\drivers directory?
Now that I have the "NICE" drivers installing with this method, I need to work on my "BAD" drivers. I have one question regarding this documentation. Step 4 under the Process - Associate the applications with the model using the MDT database or Rules. I don't use MDT database. How do I associate the hardware based apps (BAD drivers) in the deployment rules? Can we see an example of how I can use this?
Thanks a million for this guys.
Rich
Hi Daniel,
I've tried using Winzip on some of these and am unable to get them to extract. I've also tried running the .exe from CMD and put a /? after the .exe At times, I get lucky with this.
I tried to run some of these "BAD" driver installs while monitoring the %temp% directory as you stated, but I'm only able to see the source files (.dll for example), I get no information on silent switches.
Are you referring to actually repackaging the installs that include a silent switch? This is an area I'd like to know more about.
Thanks,
Thanks for the info Daniel. I'm now able to successfully deploy XP from a WIM image with driver support. One little hang up I'm running into is that with the Dell Latitude D610 I'm using, is that it's looking for a driver for the Plug and Play monitor. I don't even have to do anything aside from click ok and next a couple times and it finds the driver in Windows' default driver cache, but it interrupts the flow of the whole thing to have to watch for it. Is there a way to tell it to just find and install it like it does all of the other drivers?
Hi Rich,
It should be copying the drivers to C:\drivers.
I have found that most drivers include a readme that explains how to extract them. Generally they cannot be extracted by Winzip.
Daniel was refering to installs that include a silent switch. You should never need to repackage.
Ben
Thanks for the info Ben. Side note - How do I associate the hardware based apps (BAD drivers) in the deployment rules?
Hi Ben,
In my OSD properties, I don't have the Applications or Driver Groups tabs. How would I bring those in?
Thanks
Kelly
The best way is to use the database rules.
This is detailed in the "deployment customisation guide" in the chapter "Configuring the Database" section.
Hi Kelly,
This does not apply to OSD deployment points. You would need to create a RESOURCEROOT to perform these tasks. To do this create a network deployment point and then refer to this DP in your customsettings.ini file using the RESOURCEROOT variable.
Thanks for the info. From there on, how are these tasks performed?
thanks again,
Hey guys,
I've got everything working properly but I'm running into two issues that are just bugging me. One being that during the driver install portion of sysprep after the image is deployed, it doesn't silently install the driver for the plug and play monitor. I always have to choose if I want to let it check online for the driver, click next a couple times, then click finish. Is there a way to get that one to silently install too? It seems to be pulling it's driver from the Windows driver cache rather than c:\drivers.
Another issue I'm having in the same vain and this may not be the right spot for it, is that when I install Office 2007 with the answer file, I still have to click "Install Now" to get it to start but the rest goes from the answer file. Is there a way to get it to not require me to click "Install Now" and just do it on it's own?
Hi MWest,
This might seem a bit bizarre, but have you just waited for a few minutes without touching the machine? A couple of times I have had an identical problem and the solution was to do nothing! After 5 minutes Windows Setup continued and installed the correct driver from it's cache even though it had originally popped up the driver window.
If that is not the solution, then it seems that you don't have the right driver added in MDT, you'll need to check the PNP IDs against the drivers you have added to see if you have the *exact* driver.
My Deployment Points in MDT 2008 do not show the driver groups, applications, and task sequences as shown in this blog.
I see the note to Kelly explaining to add the RESOURCEROOT variable to the cs.ini. Just for clarification, does this pertain to MDT 08?
Also, if we could get some basic instructions on getting this setup, that would be great.
Thanks for the info Daniel, I'll give it a try. I did try to locate the driver after it was installed. When I looked at the driver for it, it said there was no driver installed. I checked around with a few other workstations in my office and they all seemed to have the generic "monitor.sys" from c:\windows\system32\drivers as their driver. I've copied that and the entire folder to my Models$ share but with no luck. I'll give the wait it out option a try right now. Oh, I did also figure out my Office silent install issue. When I created the config.xml I assumed it would make it silent, did some edits to it and it's all good.
Ok, that did it. 3.5 minutes and there it went and finished on it's own. Would be nice to not have that happen but at least I'm back on track. Thanks again Daniel!