วิธีตรวจสอบ Pending Reboot บนคอมพิวเตอร์ Windows

Withi Trwc Sxb Pending Reboot Bn Khxmphiwtexr Windows



โดยปกติแล้ว หลังจากที่ผู้ใช้ติดตั้งไดรเวอร์ อัปเดต (ซอฟต์แวร์หรือระบบ) หรือซอฟต์แวร์ หรือทำการเปลี่ยนแปลงการกำหนดค่าบางอย่างบนไคลเอนต์ Windows หรือเครื่องเซิร์ฟเวอร์ ผู้ใช้จะได้รับแจ้งให้รีบูตระบบ ในโพสต์นี้ เราจะแนะนำคุณเกี่ยวกับขั้นตอนวิธีการ ตรวจสอบการรีบูตที่รอดำเนินการบนคอมพิวเตอร์ที่ใช้ Windows .



  วิธีตรวจสอบ Pending Reboot บนคอมพิวเตอร์ Windows





วิธีตรวจสอบ Pending Reboot บนคอมพิวเตอร์ Windows

เมื่อทำงานหลายอย่างของระบบปฏิบัติการ Windows เสร็จสิ้น บางครั้งคอมพิวเตอร์จำเป็นต้องรีบูต ขณะที่เข้าสู่ระบบและอยู่ในเซสชันที่ใช้งานอยู่ คุณจะได้รับแจ้งว่าการรีบูตกำลังรอดำเนินการหรือจำเป็นโดยกล่องป๊อปอัปหรือการแจ้งเตือนบางอย่าง ซึ่งคุณสามารถยกเลิกหรือยอมรับเพื่อรีสตาร์ท Windows แต่ในบางสถานการณ์ที่คุณไม่ต้องการหรือไม่สามารถรีบูตเครื่องได้ทันที ตัวอย่างเช่น คุณมีงานที่ต้องทำไม่เสร็จก่อนที่จะรีสตาร์ท หรือคุณเพิ่งติดตั้งการอัปเดตบนเซิร์ฟเวอร์ที่ใช้งานจริงและเซิร์ฟเวอร์นั้นสามารถ 'ไม่ต้องรีบูตทันที





ในสถานการณ์เช่นนี้ โดยเฉพาะอย่างยิ่งเมื่อเกี่ยวข้องกับกรณีหลัง คุณอาจลืมเกี่ยวกับการรีบูตและตระหนักในภายหลังว่าเซิร์ฟเวอร์หรือเครื่องไคลเอนต์บางเครื่องจำเป็นต้องรีบูต แต่ขณะนี้คุณไม่สามารถระบุได้ว่าเครื่องใด — ในสถานการณ์นี้ คุณสามารถตรวจสอบ Pending Reboot บนคอมพิวเตอร์ Windows โดยใช้ a พาวเวอร์เชลล์ สคริปต์



ขณะนี้ เมื่อการรีบูตกำลังรอดำเนินการ Windows จะเพิ่มค่ารีจิสตรีหรือแฟล็กเพื่อระบุที่ตำแหน่งรีจิสตรีต่อไปนี้โดยมีค่าและเงื่อนไขที่เกี่ยวข้องตามที่แสดงในตารางด้านล่าง

สำคัญ ค่า เงื่อนไข
HKLM:\SOFTWARE\Microsoft\Updates อัปเดต ExeVolatile ค่าคือสิ่งอื่นที่ไม่ใช่ 0
HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager PendingFileRenameOperations มีค่าอยู่
HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager PendingFileRenameOperations2 มีค่าอยู่
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired ที่ คีย์มีอยู่
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Services\Pending ที่ มีคีย์ย่อยของ GUID อยู่
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\PostRebootReporting ที่ คีย์มีอยู่
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce DVDRebootSignal มีค่าอยู่
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Service\RebootPending ที่ คีย์มีอยู่
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Service\RebootInProgress ที่ คีย์มีอยู่
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Service\PackagesPending ที่ คีย์มีอยู่
HKLM:\SOFTWARE\Microsoft\ServerManager\CurrentRebootAttempts ที่ คีย์มีอยู่
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon เข้าร่วมโดเมน มีค่าอยู่
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon หลีกเลี่ยง SpnSet มีค่าอยู่
HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName ชื่อคอมพิวเตอร์ ค่า ComputerName ใน HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName แตกต่างกัน

เนื่องจากเราได้ระบุเส้นทางรีจิสทรีที่เกี่ยวข้อง แทนที่จะต้องค้นหาเส้นทางรีจิสทรีด้วยตนเอง เนื่องจากคุณอาจลืมตรวจสอบเส้นทางรีจิสทรีหนึ่งเส้นทางหรือลืมว่าต้องตรวจสอบเส้นทางใด คุณจึงทำได้ สร้างและเรียกใช้ สคริปต์ Check-PendingReboot.ps1 โดยใช้โค้ดด้านล่างเพื่อทำให้งานตรวจสอบรีจิสตรีคีย์ทั้งหมดในตารางด้านบนเป็นแบบอัตโนมัติ

  สร้างและเรียกใช้สคริปต์ 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
}
}
}

คุณสามารถจัดหาเซิร์ฟเวอร์ได้มากเท่าที่คุณต้องการผ่านทาง ชื่อคอมพิวเตอร์ พารามิเตอร์ในสคริปต์ซึ่งจะส่งคืน จริง หรือ เท็จ พร้อมกับชื่อเซิร์ฟเวอร์ คุณสามารถเรียกใช้สคริปต์ที่คล้ายกับต่อไปนี้และตรวจสอบให้แน่ใจ PowerShell ระยะไกล ได้รับการตั้งค่าและพร้อมใช้งานบนเซิร์ฟเวอร์ของคุณ

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

อ่าน : วิธีกำหนดเวลาสคริปต์ PowerShell ใน Task Scheduler

เมื่อใช้สคริปต์ PowerShell คุณสามารถสอบถามคอมพิวเตอร์หนึ่งเครื่องหรือทุกเครื่องในโดเมน หรือระบุชื่อเซิร์ฟเวอร์ด้วยตนเองเพื่อระบุเครื่องที่รอการรีบูต เมื่อระบุได้แล้ว คุณสามารถรีบูตเครื่องได้ทันทีหรือสร้างรายการเพื่อรีบูตในภายหลัง

ตอนนี้อ่าน : วิธีรีสตาร์ทคอมพิวเตอร์ Windows จากระยะไกลโดยใช้ PowerShell

การรีบูต Windows กำลังรอดำเนินการหมายความว่าอย่างไร

โดยทั่วไป คำขอรีบูตที่รอดำเนินการเกิดขึ้นเมื่อโปรแกรมหรือการติดตั้งทำการเปลี่ยนแปลงไฟล์ รีจิสตรีคีย์ บริการ หรือการตั้งค่าระบบปฏิบัติการ ซึ่งอาจทำให้ระบบอยู่ในสถานะชั่วคราว ในกรณีที่คุณได้รับ ตรวจพบการรีบูตที่รอดำเนินการ แจ้งเตือน เพียงแค่ระบุว่าการอัปเดตกำลังรอดำเนินการในเครื่องและต้องทำการรีบูตก่อนที่จะสามารถติดตั้งการอัปเดตเพิ่มเติมได้

อ่าน :

  • วิธีปิดหรือเปิดการแจ้งเตือนการรีสตาร์ทการอัปเดต
  • Windows Update ที่รอการติดตั้งหรือดาวน์โหลด กำลังเริ่มต้น ฯลฯ

จะตรวจสอบการรีบูตที่รอดำเนินการในรีจิสทรีได้อย่างไร

คุณสามารถทำได้โดย ค้นหา Windows Registry สำหรับ ต้องรีบูต สำคัญ. ในตารางด้านบนในโพสต์นี้ เราได้ระบุตำแหน่งรีจิสตรีที่เกี่ยวข้องสำหรับรีบูตรีจิสตรีคีย์ที่รอดำเนินการ หากคุณต้องการแสดงการแจ้งเตือนเมื่อพีซีของคุณต้องรีสตาร์ทเพื่อให้การติดตั้งการอัปเดต Windows เสร็จสมบูรณ์ ให้คลิก เริ่ม > การตั้งค่า > อัปเดต & ความปลอดภัย > การปรับปรุง Windows > ตัวเลือกขั้นสูง . สลับปุ่มเป็นเปิดหรือปิดสำหรับ แสดงการแจ้งเตือนเมื่อพีซีของคุณต้องรีสตาร์ทเพื่อให้การอัปเดตเสร็จสิ้น ตัวเลือก.

อ่านด้วย : มีการซ่อมแซมระบบที่รอดำเนินการซึ่งจำเป็นต้องรีบูตเพื่อให้เสร็จสมบูรณ์ .

โพสต์ยอดนิยม