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