Controleren op wachtend opnieuw opstarten op Windows-computer

Controleren Op Wachtend Opnieuw Opstarten Op Windows Computer



Nadat een gebruiker een stuurprogramma, een update (software of systeem) of software heeft geïnstalleerd of enkele configuratiewijzigingen heeft aangebracht op een Windows-client of servermachine, wordt de gebruiker doorgaans gevraagd het systeem opnieuw op te starten. In dit bericht zullen we u door de stappen leiden om dit te doen controleer op Pending Reboot op een Windows-computer .



  Controleren op wachtend opnieuw opstarten op Windows-computer





Controleren op wachtend opnieuw opstarten op een Windows-computer

Na voltooiing van veel Windows OS-taken, moet de computer soms opnieuw worden opgestart. Terwijl u bent aangemeld en in een actieve sessie zit, krijgt u een melding dat een herstart in behandeling is of vereist is door een pop-upvenster of melding - die u kunt negeren of accepteren om Windows opnieuw te starten. Maar in sommige situaties waarin u de machine niet onmiddellijk opnieuw wilt of kunt opstarten — u heeft bijvoorbeeld wat onafgemaakt werk dat u moet voltooien voordat u opnieuw opstart, of u hebt zojuist updates geïnstalleerd op een productieserver en die server kan niet meteen opnieuw worden opgestart.





In dergelijke scenario's, vooral als het om de laatste gaat, kunt u het opnieuw opstarten vergeten en op een later tijdstip beseffen dat sommige servers of clientmachines opnieuw moeten worden opgestart, maar u kunt nu niet identificeren welke van de machines - in deze situatie, u kunt controleren op Pending Reboot op een Windows-computer met behulp van een PowerShell script.



Nu, wanneer een herstart in behandeling is, zal Windows enkele registerwaarden of vlaggen toevoegen om dit aan te geven op de volgende registerlocatie met de bijbehorende waarden en voorwaarden, zoals weergegeven in de onderstaande tabel.

Sleutel Waarde Voorwaarde
HKLM:\SOFTWARE\Microsoft\Updates UpdateExeVolatile Waarde is iets anders dan 0
HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager PendingFileRenameOperations waarde bestaat
HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager PendingFileRenameOperations2 waarde bestaat
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired DAT sleutel bestaat
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Services\Pending DAT Alle GUID-subsleutels bestaan
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\PostRebootReporting DAT sleutel bestaat
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce DVDRebootSignaal waarde bestaat
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending DAT sleutel bestaat
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootInProgress DAT sleutel bestaat
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\PackagesPending DAT sleutel bestaat
HKLM:\SOFTWARE\Microsoft\ServerManager\CurrentRebootAttempts DAT sleutel bestaat
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon Word lid van Domein waarde bestaat
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon VermijdSpnSet waarde bestaat
HKLM:\SYSTEM\CurrentControlSet\Control\Computernaam\ActieveComputernaam Computer naam Waarde ComputerName in HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName is anders

Aangezien we de relevante registerpaden hebben geïdentificeerd, kunt u in plaats van handmatig door het register te kammen omdat u misschien één registerpad vergeet te controleren of gewoon vergeet welke u wilt controleren, maken en uitvoeren een Check-PendingReboot.ps1-script met behulp van de onderstaande code om de taak te automatiseren om alle registersleutels in de bovenstaande tabel te controleren.

  PowerShell-script maken en uitvoeren



[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
}
}
}

U kunt via de Computer naam parameter in het script die zal terugkeren WAAR of Vals samen met de servernaam. U kunt het script op dezelfde manier uitvoeren als het volgende en ervoor zorgen PowerShell-toegang op afstand is ingesteld en beschikbaar op uw servers.

PS51> .\Test-PendingReboot.ps1 -Server SRV1,SRV2,SRV3,etc

Lezen : PowerShell-script plannen in Taakplanner

Door het PowerShell-script te gebruiken, kunt u een of alle computers in het domein opvragen of handmatig de servernamen opgeven om te bepalen welke machines wachten op een herstart. Eenmaal geïdentificeerd, kunt u de machines meteen opnieuw opstarten of een lijst maken om later opnieuw op te starten.

Nu lezen : Windows-computer op afstand opnieuw opstarten met PowerShell

Wat betekent het dat een herstart van Windows in behandeling is?

Over het algemeen treedt een aanvraag voor opnieuw opstarten in behandeling op wanneer een programma of installatie een wijziging aanbrengt in bestanden, registersleutels, services of instellingen van het besturingssysteem, waardoor het systeem mogelijk in een tijdelijke toestand terechtkomt. In het geval dat u de Er is een wachtende herstart gedetecteerd melding, geeft dit eenvoudig aan dat er updates op de machine in behandeling zijn en dat er opnieuw moet worden opgestart voordat er extra updates kunnen worden geïnstalleerd.

Lezen :

  • Hoe Update Restart-melding in of uit te schakelen
  • Windows Update In afwachting van installatie of download, initialisatie, enz

Hoe kan ik lopende herstarts in het register controleren?

U kunt dit doen door zoeken in het Windows-register voor de Opnieuw opstarten vereist sleutel. In de tabel hierboven in dit bericht hebben we de relevante registerlocatie geïdentificeerd voor registersleutels die wachten op opnieuw opstarten. Als u een melding wilt weergeven wanneer uw pc opnieuw moet worden opgestart om de installatie van een Windows-update te voltooien, klikt u op Begin > Instellingen > Bijwerken & beveiliging > Windows-updates > Geavanceerde mogelijkheden . Zet de knop aan of uit voor de Geef een melding weer wanneer uw pc opnieuw moet worden opgestart om de update te voltooien keuze.

Lees ook : Er is een systeemreparatie in behandeling die een herstart vereist om te voltooien .

Populaire Berichten