Cách kiểm tra Pending Reboot trên máy tính Windows

Cach Kiem Tra Pending Reboot Tren May Tinh Windows



Thông thường, sau khi người dùng cài đặt trình điều khiển, bản cập nhật (phần mềm hoặc hệ thống) hoặc phần mềm hoặc thực hiện một số thay đổi cấu hình trên máy khách hoặc máy chủ Windows, người dùng sẽ được nhắc khởi động lại hệ thống. Trong bài đăng này, chúng tôi sẽ hướng dẫn bạn các bước về cách kiểm tra Pending Reboot trên máy tính Windows .



  Cách kiểm tra Pending Reboot trên máy tính Windows





Cách kiểm tra Pending Reboot trên máy tính Windows

Khi hoàn thành nhiều tác vụ của HĐH Windows, đôi khi máy tính buộc phải khởi động lại. Trong khi đăng nhập và trong một phiên đang hoạt động, bạn sẽ được thông báo rằng việc khởi động lại đang chờ xử lý hoặc được yêu cầu bởi một số hộp bật lên hoặc thông báo — bạn có thể loại bỏ hoặc chấp nhận để khởi động lại Windows. Tuy nhiên, trong một số trường hợp mà bạn không muốn hoặc không thể khởi động lại máy ngay lập tức — ví dụ: bạn có một số công việc chưa hoàn thành cần hoàn thành trước khi khởi động lại hoặc bạn vừa cài đặt các bản cập nhật trên máy chủ sản xuất và máy chủ đó có thể không được khởi động lại ngay lập tức.





Trong các tình huống như thế này, đặc biệt là khi nó liên quan đến tình huống sau, bạn có thể quên khởi động lại và sau đó nhận ra rằng một số máy chủ hoặc máy khách cần được khởi động lại nhưng hiện tại bạn không thể xác định được máy nào — trong tình huống này, bạn có thể kiểm tra Khởi động lại đang chờ xử lý trên máy tính Windows bằng cách sử dụng PowerShell kịch bản.



Bây giờ, khi quá trình khởi động lại đang chờ xử lý, Windows sẽ thêm một số giá trị sổ đăng ký hoặc cờ để biểu thị như vậy tại vị trí sổ đăng ký sau với các giá trị và điều kiện được liên kết như trong bảng bên dưới.

Chìa khóa Giá trị Tình trạng
HKLM:\PHẦN MỀM\Microsoft\Cập nhật Cập nhậtExeVolatile Giá trị là bất cứ thứ gì khác 0
HKLM:\SYSTEM\CurrentControlSet\Control\Trình quản lý phiên Đang chờ xử lýTệpĐổi tênHoạt động giá trị tồn tại
HKLM:\SYSTEM\CurrentControlSet\Control\Trình quản lý phiên Đang chờ xử lýTệpĐổi tênHoạt động2 giá trị tồn tại
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired CÁI ĐÓ khóa tồn tại
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Services\Pending CÁI ĐÓ Bất kỳ khóa con GUID nào tồn tại
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\PostRebootReporting CÁI ĐÓ khóa tồn tại
HKLM:\PHẦN MỀM\Microsoft\Windows\CurrentVersion\RunOnce DVDKhởi Động LạiTín Hiệu giá trị tồn tại
HKLM:\Software\Microsoft\Windows\CurrentVersion\Dịch vụ dựa trên thành phần\RebootPending CÁI ĐÓ khóa tồn tại
HKLM:\Software\Microsoft\Windows\CurrentVersion\Dịch vụ dựa trên thành phần\RebootInProgress CÁI ĐÓ khóa tồn tại
HKLM:\Software\Microsoft\Windows\CurrentVersion\Dịch vụ dựa trên thành phần\Gói đang chờ xử lý CÁI ĐÓ khóa tồn tại
HKLM:\SOFTWARE\Microsoft\ServerManager\CurrentRebootAttempts CÁI ĐÓ khóa tồn tại
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon tham gia miền giá trị tồn tại
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon TránhSpnSet giá trị tồn tại
HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName Tên máy tính Giá trị ComputerName trong HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName là khác

Vì chúng tôi đã xác định các đường dẫn sổ đăng ký có liên quan, thay vì rà soát sổ đăng ký theo cách thủ công vì bạn có thể quên kiểm tra một đường dẫn đăng ký hoặc chỉ quên những đường dẫn cần kiểm tra, bạn có thể tạo và chạy tập lệnh Check-PendingReboot.ps1 sử dụng mã bên dưới để tự động hóa tác vụ kiểm tra tất cả các khóa đăng ký trong bảng trên.

  Tạo và chạy tập lệnh 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
}
}
}

Bạn có thể cung cấp bao nhiêu máy chủ tùy thích thông qua Tên máy tính tham số trong tập lệnh sẽ trả về ĐÚNG VẬY hoặc SAI cùng với tên máy chủ. Bạn có thể thực thi tập lệnh tương tự như sau và đảm bảo Điều khiển từ xa PowerShell được thiết lập và có sẵn trên máy chủ của bạn.

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

Đọc : Cách lên lịch tập lệnh PowerShell trong Trình lập lịch tác vụ

Bằng cách sử dụng tập lệnh PowerShell, bạn có thể truy vấn một hoặc tất cả các máy tính trong miền hoặc cung cấp tên máy chủ theo cách thủ công để xác định các máy đang chờ khởi động lại. Sau khi được xác định, bạn có thể khởi động lại máy ngay lập tức hoặc lập danh sách để khởi động lại sau.

Hãy đọc ngay bây giờ : Cách khởi động lại máy tính Windows từ xa bằng PowerShell

Việc khởi động lại Windows đang chờ xử lý có nghĩa là gì?

Nói chung, yêu cầu khởi động lại đang chờ xử lý xảy ra khi một chương trình hoặc cài đặt thực hiện thay đổi đối với tệp, khóa đăng ký, dịch vụ hoặc cài đặt hệ điều hành có khả năng khiến hệ thống ở trạng thái tạm thời. Trong trường hợp bạn nhận được Một lần khởi động lại đang chờ xử lý đã được phát hiện thông báo, nó chỉ cho biết rằng các bản cập nhật đang chờ xử lý trên máy và phải thực hiện khởi động lại trước khi có thể cài đặt bất kỳ bản cập nhật bổ sung nào.

Đọc :

  • Cách tắt hoặc bật thông báo khởi động lại cập nhật
  • Windows Update Đang chờ cài đặt hoặc tải xuống, Đang khởi tạo, v.v.

Làm cách nào để kiểm tra các lần khởi động lại đang chờ xử lý trong sổ đăng ký?

Bạn có thể làm điều này bằng cách tìm kiếm Windows Registry cho Yêu cầu tái thiết lập chìa khóa. Trong bảng ở trên trong bài đăng này, chúng tôi đã xác định vị trí đăng ký có liên quan cho các khóa đăng ký khởi động lại đang chờ xử lý. Nếu bạn muốn hiển thị thông báo khi PC của bạn yêu cầu khởi động lại để hoàn tất cài đặt bản cập nhật Windows, hãy nhấp vào Bắt đầu > Cài đặt > Cập nhật & bảo mật > Cập nhật Windows > Tùy chọn nâng cao . Chuyển nút sang bật hoặc tắt cho Hiển thị thông báo khi PC của bạn yêu cầu khởi động lại để hoàn tất cập nhật lựa chọn.

Cũng đọc : Có một sửa chữa hệ thống đang chờ xử lý yêu cầu khởi động lại để hoàn tất .

Bài ViếT Phổ BiếN