Hvordan se etter Ventende omstart på Windows-datamaskinen

Hvordan Se Etter Ventende Omstart Pa Windows Datamaskinen



Vanligvis, etter at en bruker har installert en driver, en oppdatering (programvare eller system) eller programvare, eller gjør noen konfigurasjonsendringer på en Windows-klient eller servermaskin, vil brukeren bli bedt om å starte systemet på nytt. I dette innlegget vil vi lede deg gjennom trinnene for hvordan se etter Ventende omstart på en Windows-datamaskin .



windows 10-varsler slettes ikke

  Hvordan se etter Ventende omstart på Windows-datamaskinen





Hvordan se etter Ventende omstart på en Windows-datamaskin

Når mange Windows OS-oppgaver er fullført, blir datamaskinen noen ganger tvunget til å kreve en omstart. Mens du er pålogget og i en aktiv økt, vil du bli varslet om at en omstart venter eller kreves av en popup-boks eller varsling - som du enten kan avvise eller godta for å starte Windows på nytt. Men i noen situasjoner der du ikke vil eller ikke umiddelbart kan starte maskinen på nytt - for eksempel har du noe uferdig arbeid du må fullføre før du starter på nytt, eller du har nettopp installert oppdateringer på en produksjonsserver og den serveren kan ikke startes på nytt med en gang.





I scenarier som dette, spesielt når det gjelder sistnevnte, kan du glemme omstarten og på et senere tidspunkt innse at noen servere eller klientmaskiner må startes på nytt, men du kan nå ikke identifisere hvilken av maskinene - i denne situasjonen, du kan se etter Ventende omstart på Windows-datamaskinen ved å bruke en Kraftskall manus.



Nå, når en omstart venter, vil Windows legge til noen registerverdier eller flagg for å indikere det på følgende registerplassering med tilhørende verdier og betingelser som vist i tabellen nedenfor.

Nøkkel Verdi Betingelse
HKLM:\SOFTWARE\Microsoft\Updates UpdateExeVolatile Verdien er noe annet enn 0
HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager PendingFileRenameOperations verdi eksisterer
HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager PendingFileRenameOperations2 verdi eksisterer
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired AT nøkkel finnes
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Services\Pending AT Det finnes alle GUID-undernøkler
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\PostRebootReporting AT nøkkel finnes
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce DVDRebootSignal verdi eksisterer
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending AT nøkkel finnes
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootInProgress AT nøkkel finnes
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\PackagesPending AT nøkkel finnes
HKLM:\SOFTWARE\Microsoft\ServerManager\CurrentRebootAttempts AT nøkkel finnes
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon Bli med i domene verdi eksisterer
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon UnngåSpnSet verdi eksisterer
HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName Datamaskinnavn Verdi datamaskinnavn i HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName er forskjellig

Ettersom vi har identifisert de relevante registerbanene, i stedet for manuelt å gre gjennom registeret fordi du kanskje glemmer å sjekke én registerbane eller bare glemmer hvilke du skal sjekke, kan du opprette og kjøre et Check-PendingReboot.ps1-skript som bruker koden nedenfor for å automatisere oppgaven for å sjekke alle registernøklene i tabellen ovenfor.

snarvei for å løse ut USB

  Opprett og kjør PowerShell-skript



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

Du kan tilby så mange servere du vil via Datamaskinnavn parameter i skriptet som vil returnere ekte eller Falsk sammen med servernavnet. Du kan kjøre skriptet som ligner på følgende og sørge for PowerShell fjernkontroll er satt opp og tilgjengelig på serverne dine.

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

Lese : Hvordan planlegge PowerShell-skript i Task Scheduler

Ved å bruke PowerShell-skriptet kan du forespørre én eller alle datamaskinene i domenet eller manuelt oppgi servernavnene for å bestemme maskinene i påvente av en omstart. Når du er identifisert, kan du starte maskinene på nytt med en gang eller lage en liste for å starte på nytt senere.

Les nå : Hvordan fjernstarte Windows-datamaskinen med PowerShell

krom tapet

Hva betyr det at en omstart av Windows venter?

Vanligvis oppstår en ventende omstartsforespørsel når et program eller en installasjon endrer filer, registernøkler, tjenester eller operativsysteminnstillinger som potensielt etterlater systemet i en forbigående tilstand. I tilfellet får du En ventende omstart er oppdaget varsling, indikerer det ganske enkelt at oppdateringer venter på maskinen og en omstart må utføres før ytterligere oppdateringer kan installeres.

Lese :

  • Slik deaktiverer eller aktiverer du varsling om omstart av oppdatering
  • Windows Update venter på installasjon eller nedlasting, initialisering osv

Hvordan sjekke ventende omstarter i registeret?

Du kan gjøre dette ved å søker i Windows-registeret for Rebootrequired nøkkel. I tabellen ovenfor i dette innlegget har vi identifisert den relevante registerplasseringen for ventende omstart av registernøkler. Hvis du vil vise et varsel når PC-en krever omstart for å fullføre en Windows-oppdateringsinstallasjon, klikker du Start > Innstillinger > Oppdatering og sikkerhet > Windows-oppdateringer > Avanserte alternativer . Slå knappen på eller av for Vis et varsel når PC-en krever omstart for å fullføre oppdateringen alternativ.

Les også : Det er en systemreparasjon som venter som krever en omstart for å fullføre .

Populære Innlegg