When an OS deployment fails or ends with yellow warnings in Device Manager, drivers are a usual suspect: a boot image without the right network driver, or a model that picked up another model's drivers. In this post I'll set up driver management in Configuration Manager (still called SCCM by many) the predictable way, with one driver package per model applied by a conditioned Apply Driver Package step, and show where Auto Apply Drivers and boot image drivers fit and how to prove each device got what it needed.
Errors this guide fixes
The drivers for this device are not installed. (Code 28)Device Manager
How it works#
The driver catalog lives in Software Library › Operating Systems. The Drivers node lists every imported driver with the class, version, signature and supported hardware read from its INF file. Driver Packages copy selected drivers to a package source folder that you distribute like any other content.
Two task sequence steps install drivers during a deployment. Both run in Windows PE after Apply Operating System Image. They stage drivers into the new Windows installation, and Windows Setup installs the ones that match the hardware when it runs.
| Auto Apply Drivers | Apply Driver Package | |
|---|---|---|
| What it stages | Catalog drivers that match the device's hardware: the best match only, or all compatible drivers so Windows Setup chooses | Every driver in one driver package; Windows Setup uses the ones it needs |
| How you scope it | Driver categories | One step (or group) per model with a WMI condition |
| Stand-alone media | Not an option | Required: Microsoft Learn says you must use this step with stand-alone media |
| Predictability | Changes whenever someone imports a driver that also matches | The model gets exactly the package you tested |
Beyond a small lab, per-model packages win: you test a package once, and later imports can't change what that model receives.
Step-by-step#
1. Import the vendor driver pack#
Download the enterprise driver pack for the exact model and Windows release from the hardware vendor and extract it to a share, for example \\cm01\Sources\Drivers\Source\Dell\Latitude 7450\Win11. Then go to Software Library › Operating Systems › Drivers and select Import Driver:
- Choose Import all drivers in the following network path (UNC) and decide what happens to categories when a driver is already in the catalog (append, keep, overwrite or skip).
- The site server needs Read permission on the source folder, or the import fails.
- On Driver Details, hide unsigned drivers (Microsoft recommends signed drivers) and assign a category such as Latitude 7450 - Win11. Categories are how you scope Auto Apply Drivers.
- The supported-platform list comes from the INF and isn't always accurate; spot-check it.
2. Create one driver package per model#
- Create a new, empty folder for the package, for example
\\cm01\Sources\Drivers\Packages\Latitude7450-Win11. Each driver package needs its own empty folder that no other driver package uses, and the site server account needs Full control on it. - In Driver Packages, select Create Driver Package, then fill in the Driver Manufacturer and Driver Model fields on the General tab. They appear as searchable columns and make cleanup easier.
- Add the imported drivers (on the wizard's Add Driver to Packages page, or later with Drivers › Edit › Driver Packages). Microsoft recommends fewer than 500 drivers per package for task sequence use.
- Select Distribute Content and target the distribution points your task sequence uses.
3. Add a conditioned Apply Driver Package group per model#
First find the exact model string on a test device:
Get-CimInstance -ClassName Win32_ComputerSystem | Select-Object Manufacturer, Model
Get-CimInstance -ClassName Win32_ComputerSystemProduct | Select-Object Vendor, Name, VersionLenovo reports a machine type in Model and the friendly name in Win32_ComputerSystemProduct.Version, so query that class for Lenovo devices.
In the task sequence editor, add a Drivers group after Apply Operating System Image and the Windows and network settings steps, and before Setup Windows and ConfigMgr. Inside it, add one group per model:
- On the group's Options tab, select Add Condition › Query WMI, keep the namespace
root\cimv2and enter a query such as the one below. - In the group, add Drivers › Apply Driver Package, pick the model's package and select Install driver package via running DISM with recurse option, so every subfolder of the package is processed.
- Add a Set Task Sequence Variable step that sets
DriverPackageAppliedtoTrue.
SELECT * FROM Win32_ComputerSystem WHERE Model LIKE '%Latitude 7450%'Test each query on real hardware; if this returns an object, the condition is true:
Get-CimInstance -Query "SELECT * FROM Win32_ComputerSystem WHERE Model LIKE '%Latitude 7450%'"4. Decide what happens to unknown models#
Set DriverPackageApplied to False at the start of the Drivers group. After the model groups, add an Auto Apply Drivers step with the condition Task sequence variable DriverPackageApplied equals False, Install only the best matched compatible drivers, and Limit driver matching to only consider drivers in selected categories pointing at a small, tested fallback category, so new models still get network and storage drivers.
5. Keep boot images lean#
Windows PE needs only network and storage drivers. Add them with Drivers › Edit › Boot images (or the boot image's Drivers tab) and let the distribution points update. Match the Windows PE version of your Windows ADK (Windows 11 drivers with the ADK for Windows 11) and the boot image's architecture. Without a network driver, Windows PE can't reach the management point; without a storage driver, Format and Partition Disk finds no disk (Intel VMD systems need the Intel Rapid Storage Technology driver). While testing, select Enable command support (testing only) on the boot image's Customization tab and press F8 for ipconfig and diskpart.
Verify#
- smsts.log: confirm that exactly one model group's condition evaluated to true, the package downloaded, and the DISM command line that the step ran returned success. If no model group ran, the WMI string doesn't match the hardware. See reading smsts.log for where the log lives at each phase.
- Device Manager: no unknown devices and no
The drivers for this device are not installed. (Code 28). - PowerShell (elevated) on the finished device:
# Devices with a problem code (28 = no driver installed)
Get-CimInstance -ClassName Win32_PnPEntity | Where-Object { $_.ConfigManagerErrorCode -ne 0 } |
Select-Object Name, DeviceID, ConfigManagerErrorCode
# Third-party drivers in the driver store, with versions
Get-WindowsDriver -Online | Sort-Object ProviderName |
Select-Object ProviderName, ClassName, Version, Date, OriginalFileNameGood looks like this: the first command returns nothing and the second shows your tested versions. For a device that still has no driver, search %windir%\INF\setupapi.dev.log for its hardware ID.
Tips and gotchas#
- Disabling a driver only affects Auto Apply Drivers. A disabled driver that's still in a driver package is staged by Apply Driver Package anyway, so remove bad drivers from the package and update its distribution points.
- Update, don't redistribute: Update Distribution Points copies only changed content.
- Scripting: the ConfigurationManager module has
New-CMTSStepApplyDriverPackage(with-PackageIdand-EnableRecurse) andAdd-CMTaskSequenceStep. - Error codes: for task sequence codes such as
0x80070002, see the task sequence and OSD error codes quick reference. For in-place upgrades, see upgrading to Windows 11 with Configuration Manager.
References#
- Manage drivers in Configuration Manager (Microsoft Learn)
- New-CMTSStepApplyDriverPackage (Microsoft Learn)

