Jak zkontrolovat čekající restart na počítači se systémem Windows

Jak Zkontrolovat Cekajici Restart Na Pocitaci Se Systemem Windows



Obvykle poté, co uživatel nainstaluje ovladač, aktualizaci (software nebo systém) nebo software nebo provede nějaké změny konfigurace na počítači klienta nebo serveru Windows, bude uživatel vyzván k restartování systému. V tomto příspěvku vás provedeme kroky, jak na to zkontrolujte, zda v počítači se systémem Windows není čekáno na restartování .



  Jak zkontrolovat čekající restart na počítači se systémem Windows





Jak zkontrolovat čekající restart na počítači se systémem Windows

Po dokončení mnoha úloh operačního systému Windows je někdy počítač nucen vyžadovat restartování. Když jste přihlášeni a jste v aktivní relaci, budete upozorněni, že čeká na restartování nebo že je vyžadováno nějaké vyskakovací okno nebo upozornění – které můžete buď odmítnout, nebo přijmout a restartovat Windows. Ale v některých situacích, kdy nechcete nebo nemůžete okamžitě restartovat počítač – například máte nějakou nedokončenou práci, kterou musíte dokončit před restartováním, nebo jste právě nainstalovali aktualizace na produkční server a tento server může nebýt hned restartován.





V situacích, jako je tento, zejména pokud jde o druhý jmenovaný, můžete na restart zapomenout a později si uvědomíte, že některé servery nebo klientské počítače je třeba restartovat, ale nyní nejste schopni určit, který z počítačů — v této situaci, můžete zkontrolovat nevyřízený restart na počítači se systémem Windows pomocí a PowerShell skript.



Nyní, když čeká na restart, systém Windows přidá některé hodnoty registru nebo příznaky, které to označí v následujícím umístění registru s přidruženými hodnotami a podmínkami, jak je uvedeno v tabulce níže.

Klíč Hodnota Stav
HKLM:\SOFTWARE\Microsoft\Updates UpdateExeVolatile Hodnota je jiná než 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á aktualizace\RestartRequired ŽE klíč existuje
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Services\Pending ŽE Existují všechny podklíče GUID
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\PostRebootReporting ŽE klíč existuje
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce DVDRebootSignal hodnota existuje
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Service\RebootPending ŽE klíč existuje
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootInProgress ŽE klíč existuje
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Service\PackagesPending ŽE klíč existuje
HKLM:\SOFTWARE\Microsoft\ServerManager\CurrentRebootAttempts ŽE klíč existuje
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon JoinDomain hodnota existuje
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon Vyhněte seSpnSet hodnota existuje
HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName Název počítače Hodnota ComputerName v HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName je jiná

Protože jsme identifikovali příslušné cesty registru, místo ručního procházení registrem, protože můžete zapomenout zkontrolovat jednu cestu registru nebo prostě zapomenout, kterou chcete zkontrolovat, můžete vytvořit a spustit skript Check-PendingReboot.ps1 pomocí níže uvedeného kódu k automatizaci úlohy kontroly všech klíčů registru ve výše uvedené tabulce.

  Vytvořte a spusťte 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
}
}
}

Prostřednictvím rozhraní můžete poskytnout tolik serverů, kolik chcete Název počítače parametr ve skriptu, který se vrátí Skutečný nebo Nepravdivé spolu s názvem serveru. Můžete spustit skript podobný následujícímu a ujistěte se PowerShell Remoting je nastaven a dostupný na vašich serverech.

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

Číst : Jak naplánovat skript PowerShell v Plánovači úloh

Pomocí skriptu PowerShell můžete dotazovat jeden nebo všechny počítače v doméně nebo ručně zadat názvy serverů, abyste určili počítače čekající na restartování. Jakmile je identifikován, můžete počítač ihned restartovat nebo vytvořit seznam, který chcete restartovat později.

Nyní čtěte : Jak vzdáleně restartovat počítač se systémem Windows pomocí PowerShellu

Co to znamená, že čeká na restart systému Windows?

Obecně platí, že k nevyřízenému požadavku na restartování dochází, když program nebo instalace provede změnu souborů, klíčů registru, služeb nebo nastavení operačního systému, která potenciálně ponechá systém v přechodném stavu. V případě, že získáte Byl detekován čekající restart upozornění, jednoduše to znamená, že na počítači čekají aktualizace a před instalací dalších aktualizací je nutné provést restart.

Číst :

  • Jak zakázat nebo povolit upozornění na restartování aktualizace
  • Windows Update Čeká na instalaci nebo stažení, inicializaci atd

Jak zkontrolovat čekající restarty v registru?

Můžete to udělat pomocí vyhledávání v registru Windows pro Je vyžadován restart klíč. V tabulce výše v tomto příspěvku jsme identifikovali příslušné umístění registru pro čekající klíče registru pro restartování. Pokud chcete zobrazit upozornění, když váš počítač vyžaduje restartování k dokončení instalace aktualizace Windows, klepněte na Start > Nastavení > Aktualizace a zabezpečení > Aktualizace systému Windows > Pokročilé možnosti . Zapněte nebo vypněte tlačítko pro Zobrazit upozornění, když váš počítač vyžaduje restartování k dokončení aktualizace volba.

Přečtěte si také : Čeká se na opravu systému, která vyžaduje restart .

Populární Příspěvky