Comment mettre à jour automatiquement tous les périphériques dans le gestionnaire de périphériques

Dans le gestionnaire de périphériques Windows, il est possible de lancer « manuellement » une mise à jour automatique d’un périphérique. Mais c’est très fastidieux, chaque périphérique doit être cliqué (car on ne sait pas si ce périphérique particulier a une mise à jour disponible) – puis les fenêtres contextuelles doivent être cliquées – et il faut attendre que la recherche en ligne se termine.

J’espérais donc qu’il existe un script Powershell capable de le faire, ou peut-être une entrée de registre pour que « Windows Update » s’en charge.

(Oui, Windows ne met PAS automatiquement à jour TOUS les périphériques dans le gestionnaire de périphériques).


Source : Super User

L’article
Script pour installer ou mettre à jour les pilotes directement depuis le catalogue Microsoft
contient un script PowerShell pour faire ce qui est demandé.

L’article inclut de bonnes explications de chaque partie du script.
Je reproduis ci-dessous juste le script brut avec seulement des modifications mineures (que je n’ai pas testées) :

#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 }

Un package à usage général et puissant est
PSWindowsUpdate.

Voici quelques tutoriels sur son installation et son utilisation :

Le package ajoute la commande Get-WUInstall (et d’autres) avec laquelle vous pouvez
obtenir et installer des mises à jour.
Le code source de Get-WUInstall est aussi disponible séparément
depuis github.

Un autre exemple de son utilisation se trouve dans l’article
Script PS pour automatiser les mises à jour Windows et MS.