25

In Windows device manager it is possible to "manually" start an automatic update of a device. But its very tedious, each device has to be clicked (as it is not known if that particular device has an update available) - then the popups have to be clicked - and one has to wait for the online search to finish.

So I hoped there is some Powershell script being able to do this, or maybe a registry entry to have "Windows Update" taking care of that.

(Ehm yes, Windows does NOT automatically update ALL devices in device manager).

4

3 Answers 3

20
+100

The article Script to install or update drivers directly from Microsoft Catalog contains a PowerShell script for doing what is asked.

The article includes good explanations of each part of the script. I reproduce below just the bare script with only minor changes (which I have not tested):

#search and list all missing Drivers

$Session = New-Object -ComObject Microsoft.Update.Session           
$Searcher = $Session.CreateUpdateSearcher() 

$Searcher.ServiceID = '7971f918-a847-4430-9279-4a52d1efe18d'
$Searcher.SearchScope =  1 # MachineOnly
$Searcher.ServerSelection = 3 # Third Party

$Criteria = "IsInstalled=0 and Type='Driver' and ISHidden=0"
Write-Host('Searching Driver-Updates...') -Fore Green  
$SearchResult = $Searcher.Search($Criteria)          
$Updates = $SearchResult.Updates

#Show available Drivers

$Updates | select Title, DriverModel, DriverVerDate, Driverclass, DriverManufacturer | fl

#Download the Drivers from Microsoft

$UpdatesToDownload = New-Object -Com Microsoft.Update.UpdateColl
$updates | % { $UpdatesToDownload.Add($_) | out-null }
Write-Host('Downloading Drivers...')  -Fore Green  
$UpdateSession = New-Object -Com Microsoft.Update.Session
$Downloader = $UpdateSession.CreateUpdateDownloader()
$Downloader.Updates = $UpdatesToDownload
$Downloader.Download()

#Check if the Drivers are all downloaded and trigger the Installation

$UpdatesToInstall = New-Object -Com Microsoft.Update.UpdateColl
$updates | % { if($_.IsDownloaded) { $UpdatesToInstall.Add($_) | out-null } }

Write-Host('Installing Drivers...')  -Fore Green  
$Installer = $UpdateSession.CreateUpdateInstaller()
$Installer.Updates = $UpdatesToInstall
$InstallationResult = $Installer.Install()
if($InstallationResult.RebootRequired) {  
Write-Host('Reboot required! please reboot now..') -Fore Red  
} else { Write-Host('Done..') -Fore Green }

A general-purpose and powerful package is PSWindowsUpdate.

Here are a couple of tutorials on installing and using it :

The package adds the Get-WUInstall command (and others) with which you may get and install updates. The source of Get-WUInstall is also available separately from github.

Another example on its use is found in the article PS Script to automate Windows and MS Updates.

4
  • 1
    Beautiful! I extended the script a bit, as title #set Window Title $host.ui.RawUI.WindowTitle = "Driver Updater by harrymc" and to prevent the powershell from closing Write-Host Write-Host('Press any key to exit ...') -Fore Yellow $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") and to run the script from a a batch: @echo off powershell.exe -noprofile -ExecutionPolicy Unrestricted -command "&{start-process powershell -ArgumentList ' -ExecutionPolicy Unrestricted -noprofile -file ""%~dp0update.ps1""' -verb RunAs} while the ps script is named update.ps1 and is in same dir. Aug 25, 2017 at 6:17
  • 2
    It did not work for me (Exception from HRESULT: 0x80240024)
    – JinSnow
    Mar 28, 2019 at 16:29
  • It stops during "Searching driver-updates": Exception from HRESULT: 0x80248014 At line:12 char:1 + $SearchResult = $Searcher.Search($Criteria) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OperationStopped: (:) [], COMException + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException Any ideas?
    – Jonas
    Mar 24, 2020 at 20:59
  • @Jonas I had this error on a domain PC with WSUS server configured. To resolve, I added these lines (from the article linked in the answer), to add the Microsoft Catalog as an Update-Source at the top of the script: $UpdateSvc = New-Object -ComObject Microsoft.Update.ServiceManager $UpdateSvc.AddService2("7971f918-a847-4430-9279-4a52d1efe18d",7,"") and at the bottom, to remove the Catalog again: $updateSvc.Services | ? { $_.IsDefaultAUService -eq $false -and $_.ServiceID -eq "7971f918-a847-4430-9279-4a52d1efe18d" } | % { $UpdateSvc.RemoveService($_.ServiceID) } Oct 2, 2020 at 15:49
3

An Application Windows Update MiniTool exists which can get those drivers, yet its capable of much more - regarding windows updates.

(I personally still prefer the script from harrymc, its painless - just start it and done)


Quoted from the English Forum:

Screenshot from the application

An alternative to the standard Windows Update
What you can do:

 - Check for updates
 - Download updates
 - Installing Updates
 - Deleting installed updates
 - Hiding unwanted updates
 - Get direct links to the *.cab / *.Exe / *.Psf update files
 - View update history
 - Configure Automatic Updates
1
  • I still use this on W10, it stops auto updates which is the best feature.
    – Moab
    Oct 28, 2019 at 13:01
2

Another tool to update, very similar to "Windows Update MiniTool":

https://github.com/DavidXanatos/wumgr

Download link: https://github.com/DavidXanatos/wumgr/releases/latest

Screenshot from the linked tool

2
  • 1
    Looks like a rip off of software I found several years ago (2015), development has stopped and can no longer be found, he was a Russian, his last version was wumt_v30.07.2016>>>>>>>>>>>>>>wilderssecurity.com/threads/windows-update-minitool.380535
    – Moab
    Oct 28, 2019 at 12:58
  • 1
    This is not a fork of WUMT. It's written in a different programming language, and WUMT was closed-source so there was nothing to fork anyway. It is "inspired by" WUMT according to the author.
    – benrg
    Jan 30, 2023 at 1:54

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .