Translating Windows Update Driver Names to Friendly Driver Names

The Windows Driver Update management capability in Intune is a welcome new feature providing greater control of driver updates. One frustration I’ve long had with drivers in Windows Update though is the naming – sometimes the names are quite indescript and it can be difficult to know which driver (or driver software) it actually is.

Take my driver update profile below, for example.

What exactly is “HP Inc. – SoftwareComponent – 1.57.3391.0” or what is “INTEL – System – 1/1/1970 12:00:00 AM – 10.1.1.42“? It’s impossible to know from the name alone. And if I’m manually approving driver updates, how can I approve a driver when I don’t even know what it is?!

You can find a bit more information by searching for the driver in the Microsoft Update Catalog – but actually not all drivers can be found there.

So I wrote a bit of PowerShell that allows you search the driver install history on a device and translate the Windows Update driver name to the actual driver name registered in the system, assuming the driver is still installed and hasn’t been updated.

class Driver {
[string]$WUName
[datetime]$InstallDate
[string]$DeviceName
[string]$FriendlyName
[datetime]$DriverDate
[string]$DriverVersion
[string]$Manufacturer
}
$DriverList = [System.Collections.Generic.List[Driver]]::new()
$InstalledDrivers = Get-Package -ProviderName msu | where {$_.Metadata.Item("SupportUrl") -match "target=hub"}
foreach ($InstalledDriver in $InstalledDrivers)
{
$Driver = [Driver]::new()
$Driver.WUName = $InstalledDriver.Name
$Driver.InstallDate = [DateTime]::Parse($InstalledDriver.Metadata.Item("Date"))
$DeviceDriver = Get-CimInstance -ClassName Win32_PnPSignedDriver -Filter "DriverVersion = '$($InstalledDriver.Name.Split()[-1])'" |
Select -First 1 |
Select DeviceName,FriendlyName,DriverDate,DriverVersion,Manufacturer
If ($DeviceDriver)
{
try { $DriverDate = [DateTime]::Parse($DeviceDriver.DriverDate) }catch { $DriverDate = $DeviceDriver.DriverDate }
$Driver.DeviceName = $DeviceDriver.DeviceName
$Driver.FriendlyName = $DeviceDriver.FriendlyName
$Driver.DriverDate = $DriverDate
$Driver.DriverVersion = $DeviceDriver.DriverVersion
$Driver.Manufacturer = $DeviceDriver.Manufacturer
$DriverList.Add($Driver)
}
}
$DriverList | Out-GridView

At least now I know what drivers have been installed on my device, but it doesn’t solve the original problem of knowing what drivers I’m actually approving in the driver update profile. That would be a welcome improvement – more meaning descriptions for drivers in the driver update profiles.