Jak sprawdzić oczekujące ponowne uruchomienie na komputerze z systemem Windows

Jak Sprawdzic Oczekujace Ponowne Uruchomienie Na Komputerze Z Systemem Windows



Zwykle po zainstalowaniu przez użytkownika sterownika, aktualizacji (oprogramowania lub systemu) lub oprogramowania albo wprowadzeniu pewnych zmian konfiguracyjnych na komputerze klienckim lub serwerze z systemem Windows użytkownik zostanie poproszony o ponowne uruchomienie systemu. W tym poście przeprowadzimy Cię przez kolejne kroki sprawdź Oczekiwanie na ponowne uruchomienie na komputerze z systemem Windows .



obraz zadania jest uszkodzony lub zmodyfikowany w systemie Windows 7

  Jak sprawdzić oczekujące ponowne uruchomienie na komputerze z systemem Windows





Jak sprawdzić oczekujące ponowne uruchomienie na komputerze z systemem Windows

Po zakończeniu wielu zadań systemu operacyjnego Windows czasami komputer jest zmuszony wymagać ponownego uruchomienia. Po zalogowaniu i aktywnej sesji zostaniesz powiadomiony, że ponowne uruchomienie jest w toku lub wymagane przez wyskakujące okienko lub powiadomienie - które możesz odrzucić lub zaakceptować, aby ponownie uruchomić system Windows. Ale w niektórych sytuacjach, gdy nie chcesz lub nie możesz natychmiast ponownie uruchomić komputera — na przykład masz niedokończoną pracę, którą musisz wykonać przed ponownym uruchomieniem, lub właśnie zainstalowałeś aktualizacje na serwerze produkcyjnym i ten serwer może nie należy od razu ponownie uruchamiać.





W takich scenariuszach, zwłaszcza tych drugich, możesz zapomnieć o restarcie, a później zdać sobie sprawę, że niektóre serwery lub komputery klienckie wymagają restartu, ale nie możesz teraz zidentyfikować, która z maszyn — w tej sytuacji możesz być w stanie sprawdzić oczekujące ponowne uruchomienie na komputerze z systemem Windows za pomocą PowerShell scenariusz.



Teraz, gdy ponowne uruchomienie jest w toku, system Windows doda pewne wartości rejestru lub flagi, aby to wskazać w następującej lokalizacji rejestru wraz z powiązanymi wartościami i warunkami, jak pokazano w poniższej tabeli.

Klucz Wartość Stan
HKLM:\SOFTWARE\Microsoft\Updates UpdateExeVolatile Wartość jest różna od 0
HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager Oczekujące operacje zmiany nazwy pliku wartość istnieje
HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager Operacje oczekującej zmiany nazwy pliku2 wartość istnieje
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired TO klucz istnieje
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Services\Pending TO Istnieją dowolne podklucze GUID
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\PostRebootReporting TO klucz istnieje
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce DVDRebootSignal wartość istnieje
HKLM:\Software\Microsoft\Windows\CurrentVersion\Obsługa oparta na składnikach\RebootPending TO klucz istnieje
HKLM:\Software\Microsoft\Windows\CurrentVersion\Obsługa oparta na składnikach\RebootInProgress TO klucz istnieje
HKLM:\Software\Microsoft\Windows\CurrentVersion\Obsługa oparta na składnikach\PackagesPending TO klucz istnieje
HKLM:\SOFTWARE\Microsoft\ServerManager\CurrentRebootAttempts TO klucz istnieje
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon Dołącz do domeny wartość istnieje
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon UnikajSpnSet wartość istnieje
HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName Nazwa komputera Wartość ComputerName w HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName jest inna

Ponieważ zidentyfikowaliśmy odpowiednie ścieżki rejestru, zamiast ręcznie przeszukiwać rejestr, ponieważ możesz zapomnieć sprawdzić jedną ścieżkę rejestru lub po prostu zapomnieć, które z nich sprawdzić, możesz tworzyć i uruchamiać skrypt Check-PendingReboot.ps1 wykorzystujący poniższy kod do zautomatyzowania zadania sprawdzania wszystkich kluczy rejestru w powyższej tabeli.

  Utwórz i uruchom skrypt 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
}
}
}

Możesz udostępnić tyle serwerów, ile chcesz za pośrednictwem Nazwa komputera parametr w skrypcie, który zwróci PRAWDA Lub FAŁSZ wraz z nazwą serwera. Możesz wykonać skrypt podobny do poniższego i upewnić się Obsługa zdalna programu PowerShell jest skonfigurowany i dostępny na twoich serwerach.

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

Czytać : Jak zaplanować skrypt PowerShell w Harmonogramie zadań

Korzystając ze skryptu PowerShell, możesz wysłać zapytanie do jednego lub wszystkich komputerów w domenie lub ręcznie podać nazwy serwerów, aby określić maszyny oczekujące na ponowne uruchomienie. Po zidentyfikowaniu można od razu ponownie uruchomić komputery lub sporządzić listę do późniejszego ponownego uruchomienia.

Teraz przeczytaj : Jak zdalnie ponownie uruchomić komputer z systemem Windows za pomocą programu PowerShell

Co to znaczy, że oczekuje na ponowne uruchomienie systemu Windows?

Ogólnie rzecz biorąc, oczekujące żądanie ponownego uruchomienia występuje, gdy program lub instalacja wprowadza zmiany w plikach, kluczach rejestru, usługach lub ustawieniach systemu operacyjnego, które potencjalnie pozostawiają system w stanie przejściowym. W przypadku otrzymania tzw Wykryto oczekujące ponowne uruchomienie powiadomienie, oznacza to po prostu, że na komputerze oczekują aktualizacje i przed zainstalowaniem jakichkolwiek dodatkowych aktualizacji należy wykonać ponowne uruchomienie.

Czytać :

  • Jak wyłączyć lub włączyć powiadomienie o ponownym uruchomieniu aktualizacji
  • Windows Update Oczekiwanie na instalację lub pobranie, inicjowanie itp

Jak sprawdzić oczekujące ponowne uruchomienie w rejestrze?

Możesz to zrobić przez przeszukiwanie rejestru systemu Windows dla Wymagany restart klucz. W powyższej tabeli w tym poście zidentyfikowaliśmy odpowiednią lokalizację rejestru dla kluczy rejestru oczekujących na ponowne uruchomienie. Jeśli chcesz wyświetlać powiadomienie, gdy komputer wymaga ponownego uruchomienia w celu ukończenia instalacji aktualizacji systemu Windows, kliknij Początek > Ustawienia > Aktualizacja i bezpieczeństwo > Aktualizacje systemu Windows > Zaawansowane opcje . Włącz lub wyłącz przycisk dla Pokaż powiadomienie, gdy komputer wymaga ponownego uruchomienia w celu zakończenia aktualizacji opcja.

świetne zawieszenie

Przeczytaj także : Trwa naprawa systemu, która wymaga ponownego uruchomienia .

Popularne Wiadomości