Installing 3rd Party Drivers on Windows Server 2012 R2 Server Core

Back by popular demand, this post continues my series on Windows Server 2012 R2 Server Core.


In the first segment I explained what the benefits of Server Core are and why you should be running it.

Segment two featured a screencast on the basic configuration items and installation of a Server Core box.

We all know that the built in generic Windows device drivers have come a long way since the old days, and to be honest they work pretty darned well in most cases. However, there are still those situations that arise with some hardware where it’s either required or preferred to have the vendor’s official driver installed on the system.

In today’s post i’ll be talking about how to install 3rd party drivers via the pnputil.exe utility, as Server Core does not feature a GUI, nor do all vendors include .exe files that can be launched via the CLI for easy installation. (The below method assumes you have only the .inf files and associated files available.)

I ran into this situation a few weeks back where I had recently setup a new Hyper-V host for a SMB customer. Pretty simple configuration single host, local storage. Nothing fancy.

The hardware was quite new, so I was surprised when I noticed that the NICs were only connected at 10/100 Mbps. No 1000 Mbps connectivity. Verified that the switching infrastructure in place was 10/100/1000 Mbps capable, and verified the ethernet cables with a cable tester as well just for kicks. Everything checked out, so I figured I’d grab the latest driver from the manufacturer and found that they did not provide installers for the driver. Just a .zip file with the needed files.

In this situation the pnputil.exe utility can be called to get the driver installed.

Syntax/Help file is as follows:

Microsoft PnP Utility
pnputil.exe [-f | -i] [ -? | -a | -d | -e ] <INF name>
pnputil.exe -a a:\usbcam\USBCAM.INF -> Add package specified by USBCAM.INF
pnputil.exe -a c:\drivers\*.inf -> Add all packages in c:\drivers\
pnputil.exe -i -a a:\usbcam\USBCAM.INF -> Add and install driver package
pnputil.exe -e -> Enumerate all 3rd party packages
pnputil.exe -d oem0.inf -> Delete package oem0.inf
pnputil.exe -f -d oem0.inf -> Force delete package oem0.inf
pnputil.exe -? -> This usage screen

What i’ve always done in this situation is create a drivers folder at the root of C:\. This way you can unzip and copy to \\servername\C$\drivers from a remote machine and the relevant files are in an organized, easy-to-find spot for the next step.

Once you’ve got access to the file and you’ve verified you have administrative rights to the server in question you simply issue the below command to install the driver:


As you can see, the driver has bee successfully imported and installed on a device in the system.

In my situation, upon reboot the NIC grabbed the new driver and was then connected at the corrent LAN speed. So, case solved for me at that point.

In addition, should you need to see a list of drivers on this system that have been installed with this utility you would issue the command with the -e flag, which will display the published name, provider, class….etc..etc.


Should the driver need to be updated or removed in the future, you can delete the driver from the machine with the below option:


You can see that the package was deleted successfully, and that upon reviewing the installed driver list once again, the driver is now gone.

Hopefully this comes in handy for everyone.

Stay tuned for more posts in my Server Core series and thanks for reading!


Other posts in this series:

Part 2: Initial Configuration of Server Core

Part 1: Benefits of a Server Core Installation

Share Button