Forzare l’esecuzione degli aggiornamenti in Windows 10 e Windows Server 2016/2019

In Windows 10 e Windows Server 2016 o 2019 talvolta potrebbe essere utile forzare gli aggiornamenti per essere sicuro che vengano eseguiti in istanti temporali prefissati. Ovviamente in tali scenari è necessario poter automatizzare l’attività di installazione degli aggiornamenti automatici cosa che può essere fatta ad esempio tramite script oppure tramite il tool nativo a riga di comando %systemroot%\system32\UsoClient.exe.

Come indicato nel post wuauclt /detectnow in Windows 10 and Windows Server 2016 il tool UsoClient.exe è disponibile in Windows 10 e Windows Server 2016 e successivi ed ha sostituito il comando wuauclt /detectnow che in tali sistemi operativi non funziona più.

Se si esegue ad esempio il comando usoclient startscan e poi si aprono le impostazioni relative agli aggiornamenti, ad esempio tramite il comando ms-settings:windowsupdate, si noterà che è in corso una verifica degli aggiornamenti:

UsoClient viene utilizzato dal sistema per ricercare tramite una operazione schedulata di sistema in per ricercare in base a varie condizioni se vi sono aggiornamenti, ad esempio gli aggiornamenti sono ricercati ogni ora, al verificarsi dell’evento di sistema 8202 e in base ad altre condizioni di sistema:

Analizzando UsoClient su un Windows 10 1607 tramite Strings di SysInternals sembrerebbe che vi siano i seguenti possibili parametri che tramite ricerche in Internet dovrebbero eseguire le seguenti operazioni:

  • StartScan: Scan updates
  • StartDownload: Download updates
  • StartInstall: Install updates
  • RefreshSettings: Refresh settings

A riguardo si veda ad esempio la discussione This Computer has not reported status yet in cui un utente riporta che il tool UsoClient avrebbe un numero maggiore di parametri a riga di comando di cui però io non trovato evidenza dall’output generato dal tool Strings di SysInternals, in ogni caso va precisato che l’unico parametro di cui si ha evidenza “ufficiale” è StartScan:

  • StartScan – Used To Start Scan
  • StartDownload – Used to Start Download of Patches
  • StartInstall – Used to Install Downloaded Patches
  • RefreshSettings – Refresh Settings if any changes were made
  • StartInteractiveScan – May ask for user input and/or open dialogues to show progress or report errors
  • RestartDevice – Restart device to finish installation of updates
  • ScanInstallWait – Combined Scan Download Install
  • ResumeUpdate – Resume Update Installation On Boot

Per gestire in modo automatizzato una esecuzione forzata degli aggiornamenti è possibile utilizzare uno script come il seguente che fa uso del comando usoclient (e non del tool UsoClient.exe) e del comando timeout che permette di gestire dei tempi di attesa dal momento che in apparenza il tool UsoClient avvia le operazioni in modo asincrono:

REM WaitTime 30 minute (1800 sec)
SET WaitTime=1800

 

REM Scan Updates
%systemroot%\system32\UsoClient.exe StartScan

 

REM Wait scan to complete
timeout /t %WaitTime%

 

REM Download updates
%systemroot%\system32\UsoClient.exe StartDownload

 

REM Wait Download to complete
timeout /t %WaitTime%

 

REM Install updates
%systemroot%\system32\UsoClient.exe StartInstall

 

REM Wait Install to complete
timeout /t %WaitTime%

 

REM Restart Computer
shutdown /r /t 0 /c “Restart after force install updates by script”

Lo script dovrà essere eseguito tramite un account con privilegi amministrativi o tramite l’account di sistema SYSTEM.

UsoClient al momento sembra essere nato specificatamente per essere usato solo sistema, quindi non essendoci documentazione ufficiale potrebbe essere plausibile che il tool possa modificare il suo comportamento in future release o aggiornamenti.