Updating device drivers in a task that will have to be done from time to time to solve problems with drivers or software related to the device used. There are two kinds of device drivers, the ones that you need to run setup.exe and run a complete installation as there are supporting software needed as well. For these drivers running the setup silently will work as an upgrade as well.
Then we have the kind that is only delivered as an .inf, .cat and .sys files like for instance network drivers. In this example I will demonstrate how to update a wireless nic driver using an application, it is a really simple task. I prefer to use PNPutil as it is already present on modern operating systems.
Here is a step-by-step guide on how to update a driver, I will update an Atheros driver.
- Start by downloading the updated driver and extract it to a folder that can be used as a content source for the application. This folder actually includes the 64 bit driver as well.
- In that same folder create an update.cmd file that contains the following syntax:
pnputil.exe -i -a %~dp0netathr.inf - Create a new application using the manual option as the screenshots below describes.
- The Driver version can be found in the .inf file.
- We will not use the application catalog for this application.
- Select the Script installer type
- We name the deployment type x86 as we perhaps want do deploy a x64 driver as well.
- Select the folder created earlier as the package source and enter Update.cmd as the installation command.
- Under Detection method select Add Clause
- Select File System and Type: File and browse to a computer with the driver already installed by selecting Browse
- Browse to C:\Windows\System32\Drivers and select the. sys file that will be upgraded
12. Select that the file must match Version and then the version of the old driver is already filled in, just change it to the version of the new driver which you can find by selecting properties on the new .sys file.
14. In our case we change it to version 10.0.0.255
16. Select that it should Install for System as displayed below.
17. As a requirement add the Operating System the driver is for, in this case All Windows 7 32-bit
18. Then select Next until the wizard is finished
Then it is time to deploy the updated driver, note that a NIC driver update will disconnect the computer for a couple of seconds. I normally prefer to deploy driver update as hidden so the user doesn’t actually see anything but with a driver update that could be tricky. If we look at the client the driver version is as shown below.
Then we let the installation run and the driver will be updated.
And if we check the driver version after that it is updated.
It is a really simple way of updating a driver the detection method is really easy to configure as well and is correct the first time, so it takes 5 minutes perhaps to do. It probably take longer time to find the updated driver on the vendors website.
Happy Upgrading!
You freaking rock! No idea how you figured this out but I just updated a bunch of sharp printers with it. It worked perfect.
Very Awesome! Thanks
Great stuff. However, although it works for me, the advertisements are never marked as being successful. Deployment status always shows as ‘In Progress’.
Thank you for this great article, it saved us hours of time. Had to deploy it to over 1800 computers that needed a driver update.
Is this the preferred way in Windows 10 and SCCM 16xx? Years ago we updated drivers when we really needed to, now we update drivers monthly so the method has to be smooth and streamlined.
Hi,
Either that or use a script that runs DPinst, there is really no smoother way 🙁
/Jörgen
Is there a way to create an .exe that will create the printer also? I have a customer that wants to use SCCM to allow for a printer installation – they do not want to use GPO or login scripts. Ideas?
/Eric
Great stuff. Many thanks!!!
A quick way to check the driver version of a wireless lan is by running the below command in a dos prompt:
Netsh wlan show drivers
Hi Jörgen,
I want to deploy network driver Intel 1219. What is mean with
pnputil.exe -i -a %~dp0netathr.inf
I have download the driver and it has many files of .inf and .sys
e1c63x64.inf and e1q63x64.inf
How can be my command for nic driver?
Thanks
Thanks Jörgen. When I’m trying this it will install the driver successfully but the driver location will be set to C:\Windows\System32\DriverStore\FileRepository\ rather than C:\Windows\System32\Drivers which screws up the detection method, even when adding the different driver path
%~dp0 means the path where the script was run from.
in your case, use %~dp0e1c63x64.inf
Great post, but I’m also finding the same issue as AP .
I have a driver in C:\Windows\System32\Drivers on a Windows 10 x64 client, that I would like to update. I deploy the application and it installs but the driver is placed in C:\Windows\System32\DriverStore\FileRepository\somelongfoldername\ and the old driver remains untouched, in System32\Drivers. It needs to be updated because it blocks 1903 win 10 update.
How can I update the driver specifically in System32\Drivers directory?
Same issue as above it is adding the driver into the wrong file location and not touching the original drivers.
Thank you. It works for us. But like same as Joe said, mine doesn’t mark as successful. It also stays at “In Progress”. Maybe Joe and I missed something.
this is a better way to do it.
make the update script this:
start /b /d “%WINDIR%\system32\” pnputil.exe /add-driver “%~dp0*.inf” /install
exit