Auf ausstehenden Neustart prüfen unter Windows
Werden auf einem Windows Betriebssystem Updates installiert, wird unter Umständen ein Neustart benötigt. Windows weiß also, dass ein Neustart des Systems aussteht. Doch wie kann man auf einen ausstehenden Neustart prüfen? Hierzu steht und die Windows Registry und PowerShell als Hilfsmittel zur Verfügung.
Wann wird ein Neustart benötigt?
Windows benötigt zum Umsetzen von speziellen Änderungen einen Neustart. Das kann zum Beispiel durch folgendes ausgelöst werden:
- Windows Updates
- Installation oder Deinstallation von Software
- Konfigurieren von Windows-Features
Hier werden tiefgreifende Änderungen an Windows vorgenommen, beziehungsweise Änderungen die nur bei einem Neustart umgesetzt werden können. Somit ist ein Neustart des Windows Systems ausstehend. Ob ein Reboot benötigt wird, speichert Windows in der internen Registry ab.
Registry: Auf ausstehenden Neustart prüfen
Ob Windows einen Neustart benötigt wird in der Registry geprüft. Hier gibt es verschiedene Pfade welche geprüft werden müssen:
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired
HKLM:SYSTEM\CurrentControlSet\Control\Session Manager
Wert:PendingFileRenameOperations
Neben diesen drei Keys und Values gibt es noch weitere Pfade die überprüft werden sollten. Diese drei sind aber die wohl Häufigsten. Alle weiteren Keys findet ihr unterstehend im PowerShell Script.
PowerShell Script
Natürlich lässt sich die Windows Registry ganz einfach mit PowerShell abfragen. Somit kann ganz einfach und schnell überprüft werden ob ein Neustart aussteht. Hier werden einzelne Pfade, aber auch Werte (Values) überprüft. Wenn diese Keys und Values vorhanden sind, ist ein Windows Neustart ausstehend.
#Variablen [bool]$PendingReboot = $false $ErrorActionPreference = "SilentlyContinue" #Check Registry Keys If ((Test-Path -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired") -eq $true) { $PendingReboot = $true } If ((Test-Path -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\PostRebootReporting") -eq $true) { $PendingReboot = $true } If ((Test-Path -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired") -eq $true) { $PendingReboot = $true } If ((Test-Path -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending") -eq $true) { $PendingReboot = $true } If ((Test-Path -Path "HKLM:\SOFTWARE\Microsoft\ServerManager\CurrentRebootAttempts") -eq $true) { $PendingReboot = $true } #Check Registry Values If ((Test-RegistryValue -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing" -Value "RebootInProgress") -eq $true) { $PendingReboot = $true } If ((Test-RegistryValue -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing" -Value "PackagesPending") -eq $true) { $PendingReboot = $true } If ((Test-RegistryValue -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager" -Value "PendingFileRenameOperations") -eq $true) { $PendingReboot = $true } If ((Test-RegistryValue -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager" -Value "PendingFileRenameOperations2") -eq $true) { $PendingReboot = $true } If ((Test-RegistryValue -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" -Value "DVDRebootSignal") -eq $true) { $PendingReboot = $true } If ((Test-RegistryValue -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon" -Value "JoinDomain") -eq $true) { $PendingReboot = $true } If ((Test-RegistryValue -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon" -Value "AvoidSpnSet") -eq $true) { $PendingReboot = $true } Write-Host "Neustart ausstehend: $PendingReboot"
Der Blogbeitrag von AdamTheAutomator hat das Prüfen von Servern mit PowerShell perfektioniert: https://adamtheautomator.com/pending-reboot-registry/