Powershell driver update script not working as expected

Rakesh G 1 Reputation point
2020-12-08T09:28:30.54+00:00

I am running below script to install/update only sound driver but it's not detecting driver update or missing driver , It's only giving no driver update available. Is there anything missing in the code that's stopping the script to work?

$UpdateSvc = New-Object -ComObject Microsoft.Update.ServiceManager
$UpdateSvc.AddService2("7971f918-a847-4430-9279-4a52d1efe18d",7,"")

> check if the Windows Update service is running

if ((Get-Service -Name wuauserv).Status -ne "Running") {
Set-Service -Name wuauserv -StartupType Automatic
Start-Service -Name wuauserv
}

> check if there are updates available

$UpdateSession = New-Object -Com Microsoft.Update.Session
$UpdateSearcher = $UpdateSession.CreateUpdateSearcher()
Write-Host 'Searching Driver-Updates...' -ForegroundColor Green
$SearchResult = $UpdateSearcher.Search("IsInstalled=0 and Type='Driver' and IsHidden=0")

> collect the updates

$UpdateCollection = New-Object -Com Microsoft.Update.UpdateColl
$Updates = for ($i = 0; $i -lt $SearchResult.Updates.Count; $i++) {
$Update = $SearchResult.Updates.Item($i)

> we are only interested in Audio driver updates

 >> if you need to add more manufacturers, change the first part in the 'if' to for instance

 >> $Update.DriverManufacturer -match 'Realtek|Conexant|Intel'

if ( $Update.DriverManufacturer -match 'Realtek|Conexant|Intel' -and
($Update.Title -like 'audio' -or $Update.Description -like 'audio')) {
if (-not $Update.EulaAccepted) { $Update.AcceptEula() | Out-Null }
[void]$UpdateCollection.Add($Update)

> output a PsCustomObject for display purposes only

    $Update | Select-Object Title, DriverModel, DriverVerDate, Driverclass, DriverManufacturer
}

}

>no updates found; exit the script

if ($null -eq $Updates -or $Updates.Count -eq 0) {
Write-Host 'No Driver-Updates available...' -ForegroundColor Cyan
}
else {

> Show available driver updates...

$Updates | Format-List

   >>download the updates

Write-Host 'Downloading driver updates...' -ForegroundColor Green  
$Downloader = $UpdateSession.CreateUpdateDownloader()
$Downloader.Updates = $UpdateCollection
$Downloader.Priority = 3  # high
[void]$Downloader.Download()

  >>install the updates

Write-Host 'Installing Drivers...' -ForegroundColor Green
$Installer = $UpdateSession.CreateUpdateInstaller()

    >>accept all Critical and Security bulletins.

$Installer.ForceQuiet = $true
$Installer.Updates    = $UpdateCollection
$InstallationResult   = $Installer.Install()

$ResultCode = $InstallationResult.ResultCode

   >> test if the computer needs rebooting

if ($InstallationResult.RebootRequired) {
    Write-Host 'Reboot required! please reboot now..' -ForegroundColor Red
}
else {
    Write-Host 'Done..' -ForegroundColor Green
}

}

> Clean-up COM objects

$null = System.Runtime.Interopservices.Marshal::ReleaseComObject($UpdateSearcher)
$null = System.Runtime.Interopservices.Marshal::ReleaseComObject($UpdateCollection)
$null = System.Runtime.Interopservices.Marshal::ReleaseComObject($SearchResult)
if ($Downloader) { $null = System.Runtime.Interopservices.Marshal::ReleaseComObject($Downloader)}
if ($Installer) { $null = System.Runtime.Interopservices.Marshal::ReleaseComObject($Installer)}

Windows 10
Windows 10
A Microsoft operating system that runs on personal computers and tablets.
10,629 questions
Windows Server PowerShell
Windows Server PowerShell
Windows Server: A family of Microsoft server operating systems that support enterprise-level management, data storage, applications, and communications.PowerShell: A family of Microsoft task automation and configuration management frameworks consisting of a command-line shell and associated scripting language.
5,372 questions
{count} votes

1 answer

Sort by: Oldest
  1. Aravinth Mathan 321 Reputation points
    2020-12-10T16:37:05.873+00:00

    Does it show updates if you manually check for update?
    There are GPOs which can block update over internet, have you checked on those.

    Regards
    Aravinth