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:

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"
Prüfen ob Neustart ausstehend PowerShell

Der Blogbeitrag von AdamTheAutomator hat das Prüfen von Servern mit PowerShell perfektioniert: https://adamtheautomator.com/pending-reboot-registry/

Johannes
 

Click Here to Leave a Comment Below 0 comments