Ci sono delle operazioni del sistema operativo, come l'installazione degli aggiornamenti di Windows o il join a un dominio di un computer aziendale, che richiedono un riavvio obbligatorio per poter essere completate, ma anche il dover rinominare determinati file, perché in uso al momento dell'operazione, può richiedere un riavvio del computer.
Al lavoro, alcuni utenti ci stanno segnalando che ogni giorno gli compare la richiesta di installare gli aggiornamenti di Windows, puntualmente loro eseguono il presunto aggiornamento riavviando il computer ma il giorno dopo si ripropone.
Mi sono messo alla ricerca di un modo per capire se questi "Pending Reboot", o in attesa di riavvio, erano reali o il sistema operativo si era perso qualche passaggio.

Il modulo PendingReboot
La prima cosa trovata è il modulo PendingReboot che si può installare con il comando: Install-Module -Name PendingReboot
Per sapere se si ha un riavvio in attesa si può usare Test-PendingReboot, se non volete vedere il Warning giallo basta aggiungere al comando l'opzione -SkipConfigurationManagerClientCheck, se la risposta è True qualcosa è in attesa del riavvio.
Con Test-PendingReboot -Detailed si può vedere di quale operazione si tratta.

Questo modulo sembra però avere un bug, che si vede solo con PowerShell 7 mentre non appare con la versione 5, mostra un PendingComputerRenameDomainJoin in True, anche su computer personali come il mio. Per PowerShell 5 è invece tutto a posto.

Lo script
Leggendo alcune guide su Internet ho trovato delle indicazioni relative ad alcune chiavi di registro che contengono questi riavvii in attesa, altri siti mi davano chiavi diverse, ChatGPT me ne ha date altre e generato uno script di sola lettura, che trovate allegato all'articolo, e sono le sette chiavi qui elencate:
- # 1. CBS - Chiave intera"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending"
- # 2. Windows Update - Chiave intera"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired"
- # 3. Pending File Rename - Valore specifico a destra"HKLM:\System\CurrentControlSet\Control\Session Manager" -Name "PendingFileRenameOperations"
- # 4. Update Exe Volatile - Valore specifico a destra"HKLM:\SOFTWARE\Microsoft\Updates" -Name "UpdateExeVolatile"
- # 5. MSI In Progress - Chiave intera"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\InProgress"
- # 6. CBS Packages Pending - Chiave intera"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\PackagesPending"
- # 7. Computer Name Rename - Valore specifico a destra "HKLM:\System\CurrentControlSet\Control\ComputerName\ActiveComputerName" -Name "ComputerName""HKLM:\System\CurrentControlSet\Control\ComputerName\ComputerName" -Name "ComputerName"
Lo script è volutamente in sola lettura, perché il mio scopo era solo sapere se qualcosa, in questo caso gli aggiornamenti di Windows, erano in attesa di installazione o si erano già completati.
Volendo potete andare a ricercare le chiavi nel registro e, se queste vi causano dei problemi strani, eventualmente cancellarle (previo un loro backup giusto per sicurezza).
Dopo un riavvio del computer queste chiavi dovrebbero comunque scomparire da sole ed è quindi bene non cancellarle manualmente.

Questo è lo script in azione, il FileRenamePending è sempre l'eseguibile di Chrome visualizzato nell'immagine precedente.

Il comando
Per una ricerca più mirata delle sole chiavi di registro relative agli aggiornamenti di Windows si può utilizzare questo comando:
Get-Item 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired' -ErrorAction SilentlyContinue
Durante le prove fatte, ho trovato dei computer che ne avevano anche più di una come chiavi di registro, per verificare se ci sono aggiornamenti in attesa di essere installati si può usare il comando get-wuhistory.

Se non risulta nessuna installazione InProgress si può provare a dare una "ripulita" alle componenti di Windows Update utilizzando il tool segnalato in questo articolo.
.