Nachdem ein Benutzer einen Treiber, ein Update (Software oder System) oder eine Software installiert oder einige Konfigurationsänderungen auf einem Windows-Client- oder Servercomputer vorgenommen hat, wird der Benutzer normalerweise aufgefordert, das System neu zu starten. In diesem Beitrag führen wir Sie durch die einzelnen Schritte Suchen Sie auf einem Windows-Computer nach ausstehendem Neustart .
Instagram Live Windows 10
So prüfen Sie auf einem Windows-Computer, ob ein Neustart aussteht
Nach Abschluss vieler Aufgaben des Windows-Betriebssystems muss der Computer manchmal neu gestartet werden. Während Sie angemeldet sind und sich in einer aktiven Sitzung befinden, werden Sie durch ein Popup-Fenster oder eine Benachrichtigung benachrichtigt, dass ein Neustart aussteht oder erforderlich ist – die Sie entweder ablehnen oder akzeptieren können, um Windows neu zu starten. Aber in manchen Situationen, in denen Sie den Computer nicht sofort neu starten möchten oder können, müssen Sie beispielsweise vor dem Neustart noch einige Arbeiten erledigen, oder Sie haben gerade Updates auf einem Produktionsserver installiert, und dieser Server kann dies tun nicht sofort neu gestartet werden.
In Szenarien wie diesem, insbesondere wenn es um letzteres geht, vergessen Sie möglicherweise den Neustart und stellen zu einem späteren Zeitpunkt fest, dass einige Server oder Client-Computer neu gestartet werden müssen, aber Sie können jetzt nicht erkennen, welche der Computer – in dieser Situation, Sie können auf einem Windows-Computer nach einem ausstehenden Neustart suchen, indem Sie a verwenden Power Shell Skript.
Wenn nun ein Neustart ansteht, fügt Windows einige Registrierungswerte oder Flags hinzu, um dies an der folgenden Registrierungsposition mit den zugehörigen Werten und Bedingungen anzuzeigen, wie in der folgenden Tabelle gezeigt. Taste Wert Zustand HKLM:\SOFTWARE\Microsoft\Updates UpdateExeVolatile Wert ist alles andere als 0 HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager Ausstehende Dateiumbenennungsoperationen Wert besteht HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager Ausstehende Dateiumbenennungsoperationen2 Wert besteht HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired DAS Schlüssel existiert HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Services\Pending DAS Alle GUID-Unterschlüssel sind vorhanden HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\PostRebootReporting DAS Schlüssel existiert HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce DVDRebootSignal Wert besteht HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending DAS Schlüssel existiert HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootInProgress DAS Schlüssel existiert HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\PackagesPending DAS Schlüssel existiert HKLM:\SOFTWARE\Microsoft\ServerManager\CurrentRebootAttempts DAS Schlüssel existiert HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon JoinDomain Wert besteht HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon SpnSet vermeiden Wert besteht HKLM:\SYSTEM\CurrentControlSet\Control\Computername\ActiveComputerName Computername Wert ComputerName in HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName ist anders
Da wir die relevanten Registrierungspfade identifiziert haben, können Sie dies tun, anstatt die Registrierung manuell zu durchsuchen, weil Sie möglicherweise vergessen haben, einen Registrierungspfad zu überprüfen, oder einfach vergessen, welche zu überprüfen sind erstellen und ausführen ein Check-PendingReboot.ps1-Skript, das den folgenden Code verwendet, um die Aufgabe zum Überprüfen aller Registrierungsschlüssel in der obigen Tabelle zu automatisieren.
[CmdletBinding()] param( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string[]]$ComputerName, [Parameter()] [ValidateNotNullOrEmpty()] [pscredential]$Credential )
$ErrorActionPreference = 'Stop'
$scriptBlock = {
$VerbosePreference = $using:VerbosePreference function Test-RegistryKey { [OutputType('bool')] [CmdletBinding()] param ( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string]$Key ) $ErrorActionPreference = 'Stop'
if (Get-Item -Path $Key -ErrorAction Ignore) { $true } }
function Test-RegistryValue { [OutputType('bool')] [CmdletBinding()] param ( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string]$Key,
[Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string]$Value ) $ErrorActionPreference = 'Stop'
if (Get-ItemProperty -Path $Key -Name $Value -ErrorAction Ignore) { $true } }
function Test-RegistryValueNotNull { [OutputType('bool')] [CmdletBinding()] param ( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string]$Key,
[Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string]$Value ) $ErrorActionPreference = 'Stop'
if (($regVal = Get-ItemProperty -Path $Key -Name $Value -ErrorAction Ignore) -and $regVal.($Value)) { $true } }
# Added "test-path" to each test that did not leverage a custom function from above since # an exception is thrown when Get-ItemProperty or Get-ChildItem are passed a nonexistant key path $tests = @( { Test-RegistryKey -Key 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending' } { Test-RegistryKey -Key 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootInProgress' } { Test-RegistryKey -Key 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired' } { Test-RegistryKey -Key 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\PackagesPending' } { Test-RegistryKey -Key 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\PostRebootReporting' } { Test-RegistryValueNotNull -Key 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager' -Value 'PendingFileRenameOperations' } { Test-RegistryValueNotNull -Key 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager' -Value 'PendingFileRenameOperations2' } { # Added test to check first if key exists, using "ErrorAction ignore" will incorrectly return $true 'HKLM:\SOFTWARE\Microsoft\Updates' | Where-Object { test-path $_ -PathType Container } | ForEach-Object { (Get-ItemProperty -Path $_ -Name 'UpdateExeVolatile' | Select-Object -ExpandProperty UpdateExeVolatile) -ne 0 } } { Test-RegistryValue -Key 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce' -Value 'DVDRebootSignal' } { Test-RegistryKey -Key 'HKLM:\SOFTWARE\Microsoft\ServerManager\CurrentRebootAttemps' } { Test-RegistryValue -Key 'HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon' -Value 'JoinDomain' } { Test-RegistryValue -Key 'HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon' -Value 'AvoidSpnSet' } { # Added test to check first if keys exists, if not each group will return $Null # May need to evaluate what it means if one or both of these keys do not exist ( 'HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName' | Where-Object { test-path $_ } | %{ (Get-ItemProperty -Path $_ ).ComputerName } ) -ne ( 'HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName' | Where-Object { Test-Path $_ } | %{ (Get-ItemProperty -Path $_ ).ComputerName } ) } { # Added test to check first if key exists 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Services\Pending' | Where-Object { (Test-Path $_) -and (Get-ChildItem -Path $_) } | ForEach-Object { $true } } )
foreach ($test in $tests) { Write-Verbose "Running scriptblock: [$($test.ToString())]" if (& $test) { $true break } } }
foreach ($computer in $ComputerName) { try { $connParams = @{ 'ComputerName' = $computer } if ($PSBoundParameters.ContainsKey('Credential')) { $connParams.Credential = $Credential }
$output = @{ ComputerName = $computer IsPendingReboot = $false }
$psRemotingSession = New-PSSession @connParams if (-not ($output.IsPendingReboot = Invoke-Command -Session $psRemotingSession -ScriptBlock $scriptBlock)) { $output.IsPendingReboot = $false } [pscustomobject]$output } catch { Write-Error -Message $_.Exception.Message } finally { if (Get-Variable -Name 'psRemotingSession' -ErrorAction Ignore) { $psRemotingSession | Remove-PSSession } } }
Über die können Sie beliebig viele Server bereitstellen Computername Parameter im Skript, der zurückgegeben wird WAHR oder FALSCH zusammen mit dem Servernamen. Sie können das Skript ähnlich wie folgt ausführen und sicherstellen PowerShell-Remoting eingerichtet und auf Ihren Servern verfügbar ist.
PS51> .\Test-PendingReboot.ps1 -Server SRV1,SRV2,SRV3,etc
Lesen : So planen Sie das PowerShell-Skript im Taskplaner
Mithilfe des PowerShell-Skripts können Sie einen oder alle Computer in der Domäne abfragen oder die Servernamen manuell angeben, um die Computer zu ermitteln, die auf einen Neustart warten. Nach der Identifizierung können Sie die Computer sofort neu starten oder eine Liste für den späteren Neustart erstellen.
Jetzt lesen : So starten Sie einen Windows-Computer mit PowerShell aus der Ferne neu
Was bedeutet es, dass ein Windows-Neustart aussteht?
Im Allgemeinen tritt eine ausstehende Neustartanforderung auf, wenn ein Programm oder eine Installation Änderungen an Dateien, Registrierungsschlüsseln, Diensten oder Betriebssystemeinstellungen vornimmt und das System möglicherweise in einem vorübergehenden Zustand belässt. In dem Fall bekommen Sie die Ein ausstehender Neustart wurde erkannt Benachrichtigung, zeigt sie lediglich an, dass Updates auf dem Computer anstehen und ein Neustart durchgeführt werden muss, bevor weitere Updates installiert werden können.
Lesen :
- So deaktivieren oder aktivieren Sie die Update-Neustartbenachrichtigung
- Windows Update Ausstehende Installation oder Download, Initialisierung usw
Wie überprüfe ich ausstehende Neustarts in der Registrierung?
Sie können dies tun, indem Sie Durchsuchen der Windows-Registrierung für die Neustart erforderlich Taste. In der Tabelle oben in diesem Beitrag haben wir den relevanten Registrierungsspeicherort für ausstehende Neustart-Registrierungsschlüssel identifiziert. Wenn Sie eine Benachrichtigung anzeigen möchten, wenn Ihr PC neu gestartet werden muss, um die Installation eines Windows-Updates abzuschließen, klicken Sie auf Start > Einstellungen > Update & Sicherheit > Windows-Updates > Erweiterte Optionen . Schalten Sie die Schaltfläche für ein oder aus Zeigen Sie eine Benachrichtigung an, wenn Ihr PC neu gestartet werden muss, um die Aktualisierung abzuschließen Möglichkeit.
Lesen Sie auch : Es steht eine Systemreparatur an, für deren Abschluss ein Neustart erforderlich ist .