
Microsoft Windows è indiscutibilmente il Sistema Operativo più diffuso al mondo da decenni, il che non vuol dire automaticamente “il più conosciuto” . Sicuramente il più “attaccato” dagli hacker cosi come da numerosi detrattori che prediligono piattaforme Desktop/Server “alternative” alla creatura di Bill Gates.
Una delle caratteristiche che contraddistingue da sempre Windows è la necessità di essere supportato da codice esterno, sotto forma di drivers e librerie di sistema.
Inizialmente il supporto esterno prevedeva rilasci periodici piuttosto diluiti nel tempo, ma la crescita esponenziale delle applicazioni disponibili, l’integrazione di nuovo hardware e soprattutto l’estensione di Internet, ha comportato la necessità di rivedere continuamente il software “accessorio” . Di conseguenza gli “updates” sono disponibili quasi giornalmente, “consigliati” e da non procrastinare all’infinito.
Il sistema “a finestre” per eccellenza propone da sempre la semplicità di uso, segnala “automaticamente” gli aggiornamenti disponibili in forma grafica. Tuttavia, con l’introduzione della “Powershell” come vero e proprio ambiente di amministrazione/programmazione evoluto da linea di comando, l’operazione di “Windows Update” può essere portata a termine senza problemi, con più “granularità” ed efficacia.
Contrariamente a come si potrebbe pensare, le operazioni da CLI (Command Line Interface) non sono particolarmente complesse ma alla portata di qualunque utente evoluto, non per forza “smanettone“.
Vediamo in dettaglio come procedere.
Ricercare la console “Windows Powershell” fra le applicazioni Windows ed eseguirla con diritti amministrativi (tasto del mouse).

Una volta avviata:
- Abilitare l’esecuzione comandi
- Installare il modulo
- Verificare l’installazione
Set-ExecutionPolicy –ExecutionPolicy RemoteSigned -force
Install-Module -Name PSWindowsUpdate -Force
Get-Package -Name PSWindowsUpdate

Lista dei comandi disponibili con il modulo PSWindowsUpdate.
get-command -module PSWindowsUpdate

Ricerca aggiornamenti completa e successiva installazione della singola KB (patch).
Get-WindowsUpdate
Oppure.
Get-WUList
Poi ..
Get-WindowsUpdate -Install -KBArticleID KBxxxx

Ricerca e installazione “full” degli aggiornamenti, con riavvio finale di sistema.
Get-WindowsUpdate -AcceptAll -Install -AutoReboot
Verifica delle impostazioni legate a Windows Update (es. puntamento ad un server WSUS o SCCM)
Get-WUSettings

Verifica degli aggiornamenti installati.
Get-WUHistory
Rimozione singola patch, senza riavvio.
Remove-WindowsUpdate -KBArticleID KBxxxx -NoRestart
Nascondere la singola KB per non installarla.
$HideList = “KBxxxxx”
Get-WindowsUpdate -KBArticleID $HideList –Hide
Visualizzare nuovamente la singola KB nascosta.
Show-WindowsUpdate -KBArticleID $HideList
Get-WindowsUpdate –IsHidden
Controllare la dipendenza degli aggiornamenti da WSUS.
Get-WUServiceManager
Riferimento a “Windows Update” Internet, in alternativa a repository WSUS interno.
Get-WUlist -MicrosoftUpdate
Forzare gli aggiornamenti da Windows Update “Internet”, in alternativa a WSUS, SCCM o Intune
Add-WUServiceManager -ServiceID "7971f918-a847-4430-9279-4a52d1efe18d" -AddServiceFlag 7
Esclusione di certe categorie di Driver update e singole patch.
Get-WUlist -NotCategory "Drivers" -NotTitle "OneDrive" -NotKBArticleID KBxxxx
Installazione completa KB disponibili e logging dell’operazione.
Install-WindowsUpdate -AcceptAll -Install -AutoReboot | Out-File "c:\temp\$(get-date -f yyyy-MM-dd)-WindowsUpdate.log" -force
Installare tutte le KB, escludendo selettivamente drivers e singole patch (senza riavvio)
Install-WindowsUpdate -NotCategory "Drivers" -NotTitle OneDrive -NotKBArticleID KBxxxx -AcceptAll -IgnoreReboot
Controllo dello stato dopo aggiornamenti, se richiesti livelli di riavvio.
Get-WURebootStatus | select RebootRequired, RebootScheduled
Verifica presenza singola KB e relativa data di installazione.
Get-WUHistory| Where-Object {$_.Title -match "KBxxxx"} | Select-Object *|ft
Verifica ultima data dell’ultima operazione a buon fine di un aggiornamento.
Get-WULastResults |select LastSearchSuccessDate, LastInstallationSuccessDate