Ako skontrolovať čakajúci reštart na počítači so systémom Windows

Ako Skontrolovat Cakajuci Restart Na Pocitaci So Systemom Windows



Zvyčajne, keď používateľ nainštaluje ovládač, aktualizáciu (softvér alebo systém) alebo softvér alebo vykoná nejaké zmeny v konfigurácii na počítači klienta alebo servera Windows, používateľ bude vyzvaný na reštartovanie systému. V tomto príspevku vás prevedieme krokmi, ako na to skontrolujte, či na počítači so systémom Windows nie je čakajúci reštart .



  Ako skontrolovať čakajúci reštart na počítači so systémom Windows





Ako skontrolovať čakajúci reštart na počítači so systémom Windows

Po dokončení mnohých úloh operačného systému Windows je niekedy počítač nútený vyžadovať reštart. Keď ste prihlásení a máte aktívnu reláciu, budete upozornení, že reštart čaká alebo si ho vyžaduje niektoré kontextové okno alebo upozornenie – ktoré môžete zamietnuť alebo prijať a reštartovať systém Windows. Ale v niektorých situáciách, keď nechcete alebo nemôžete okamžite reštartovať počítač – napríklad máte nejakú nedokončenú prácu, ktorú musíte dokončiť pred reštartovaním, alebo ste práve nainštalovali aktualizácie na produkčný server a tento server môže nereštartovať hneď.





V scenároch, ako je tento, najmä pokiaľ ide o druhý, môžete zabudnúť na reštart a neskôr si uvedomiť, že niektoré servery alebo klientske počítače je potrebné reštartovať, ale teraz nemôžete identifikovať, ktorý z počítačov — v tejto situácii, na počítači so systémom Windows môžete skontrolovať čakajúci reštart pomocou a PowerShell skript.



Teraz, keď čaká na reštart, systém Windows pridá niektoré hodnoty alebo príznaky databázy Registry, ktoré to označia na nasledujúcom umiestnení databázy Registry s priradenými hodnotami a podmienkami, ako je uvedené v tabuľke nižšie.

kľúč Hodnota Podmienka
HKLM:\SOFTWARE\Microsoft\Updates UpdateExeVolatile Hodnota je čokoľvek iné ako 0
HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager PendingFileRenameOperations hodnota existuje
HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager PendingFileRenameOperations2 hodnota existuje
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Automatická aktualizácia\Vyžaduje sa reštart TO kľúč existuje
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Services\Pending TO Existujú akékoľvek podkľúče GUID
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\PostRebootReporting TO kľúč existuje
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce DVDRebootSignal hodnota existuje
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Service\RebootPending TO kľúč existuje
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Service\RebootInProgress TO kľúč existuje
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Service\PackagesPending TO kľúč existuje
HKLM:\SOFTWARE\Microsoft\ServerManager\CurrentRebootAttempts TO kľúč existuje
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon Pripojte sa k doméne hodnota existuje
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon Vyhnite saSpnSet hodnota existuje
HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName Názov počítača Hodnota ComputerName v HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName je iná

Keďže sme identifikovali príslušné cesty registra, namiesto manuálneho prehľadávania registra, pretože môžete zabudnúť skontrolovať jednu cestu registra alebo jednoducho zabudnúť, ktorú z nich skontrolovať, môžete vytvoriť a spustiť skript Check-PendingReboot.ps1 pomocou kódu nižšie na automatizáciu úlohy kontroly všetkých kľúčov databázy Registry v tabuľke vyššie.

  Vytvorte a spustite skript PowerShell



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

Prostredníctvom služby môžete poskytnúť toľko serverov, koľko chcete Názov počítača parameter v skripte, ktorý sa vráti Pravda alebo Nepravdivé spolu s názvom servera. Môžete spustiť skript podobný nasledujúcemu a uistiť sa PowerShell Remoting je nastavený a dostupný na vašich serveroch.

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

Čítať : Ako naplánovať skript PowerShell v Plánovači úloh

Pomocou skriptu PowerShell môžete dotazovať jeden alebo všetky počítače v doméne alebo manuálne zadať názvy serverov, aby ste určili počítače čakajúce na reštart. Po identifikácii môžete okamžite reštartovať počítače alebo vytvoriť zoznam na reštartovanie neskôr.

Teraz čítajte : Ako vzdialene reštartovať počítač so systémom Windows pomocou PowerShell

Čo to znamená, že čaká na reštart systému Windows?

Vo všeobecnosti platí, že čakajúca požiadavka na reštart nastane, keď program alebo inštalácia zmení súbory, kľúče databázy Registry, služby alebo nastavenia operačného systému, ktoré potenciálne zanechajú systém v prechodnom stave. V prípade, že získate Bol zistený čakajúci reštart oznamuje jednoducho, že na počítači čakajú aktualizácie a pred inštaláciou akýchkoľvek ďalších aktualizácií je potrebné vykonať reštart.

Čítať :

  • Ako zakázať alebo povoliť upozornenie na reštart aktualizácie
  • Windows Update Čaká na inštaláciu alebo stiahnutie, inicializáciu atď

Ako skontrolovať čakajúce reštarty v registri?

Môžete to urobiť pomocou vyhľadávanie v registri Windows pre Vyžaduje sa reštart kľúč. V tabuľke vyššie v tomto príspevku sme identifikovali príslušné umiestnenie registra pre čakajúce kľúče registra reštartu. Ak chcete zobraziť upozornenie, keď váš počítač vyžaduje reštart na dokončenie inštalácie aktualizácie systému Windows, kliknite na Štart > nastavenie > Aktualizácia a zabezpečenie > Aktualizácie systému Windows > Pokročilé nastavenia . Zapnite alebo vypnite tlačidlo pre Zobrazte upozornenie, keď váš počítač vyžaduje reštart na dokončenie aktualizácie možnosť.

Prečítajte si tiež : Čaká sa na opravu systému, ktorá si vyžaduje reštart .

vlastný e-mail programu Outlook
Populárne Príspevky