Biasanya, setelah pengguna menginstal driver, pembaruan (perangkat lunak atau sistem), atau perangkat lunak, atau membuat beberapa perubahan konfigurasi pada klien Windows atau mesin server, pengguna akan diminta untuk mem-boot ulang sistem. Dalam posting ini, kami akan memandu Anda melalui langkah-langkah tentang cara memeriksa Pending Reboot di komputer Windows.
//
Cara memeriksa Pending Reboot pada komputer Windows
Setelah menyelesaikan banyak tugas OS Windows, terkadang komputer terpaksa memerlukan reboot. Saat masuk dan dalam sesi aktif, Anda akan diberi tahu bahwa reboot sedang menunggu atau diperlukan oleh beberapa kotak sembulan atau pemberitahuan — yang dapat Anda abaikan atau terima untuk memulai ulang Windows. Namun, dalam beberapa situasi di mana Anda tidak ingin atau tidak dapat segera mem-boot ulang mesin — misalnya, Anda memiliki beberapa pekerjaan yang belum selesai yang harus Anda selesaikan sebelum memulai ulang, atau Anda baru saja menginstal pembaruan di server produksi dan server tersebut dapat tidak langsung di-reboot.
Dalam skenario seperti ini, terutama yang menyangkut yang terakhir, Anda mungkin lupa tentang reboot dan di lain waktu menyadari bahwa beberapa server atau mesin klien perlu di-reboot tetapi Anda sekarang tidak dapat mengidentifikasi yang mana mesin — dalam situasi ini, Anda dapat memeriksa Pending Reboot di komputer Windows menggunakan skrip PowerShell.
Sekarang, saat reboot tertunda, Windows akan menambahkan beberapa nilai registri atau tanda untuk menunjukkannya di lokasi registri berikut dengan nilai dan ketentuan terkait seperti yang ditunjukkan pada tabel di bawah ini.
KeyValueConditionHKLM:SOFTWAREMicrosoftUpdatesUpdateExeVolatileValue adalah selain 0HKLM:SYSTEMCurrentControlSetControlSession ManagerPendingFil eRenameOperationsvalue adaHKLM:SYSTEMCurrentControlSetControlSession ManagerPendingFileRenameOperations2value adaHKLM:SOFTWAREMicrosoftWindowsCurrentVersionWindowsUpdateAuto UpdateRebootRequiredNAkey adaHKLM:SOFTWAREMicrosoftWindowsCurrentVersionWindowsUpdateServicesPendingNASetiap subkunci GUID adaHKLM: SOFTWAREMicrosoftWindowsCurrentVersionWindowsUpdateAuto UpdatePostRebootReportingNAkey adaHKLM:SOFTWAREMicrosoftWindowsCurrentVersionRunOnceDVDRebootSignalvalue adaHKLM:SoftwareMicrosoftWindowsCurrentVersionComponent Based ServicingRebootPendingNAkey adaHKLM:SoftwareMicrosoftWindows CurrentVersionComponent Based ServicingRebootInProgressNAkey adaHKLM:SoftwareMicrosoftWindowsCurrentVersionComponent Based ServicingPackagesPendingNAkey adaHKLM:SOFTWAREMicrosoftServerManagerCurrentRebootAttemptsNAkey adaHKLM:SYSTEMCurrentControlSetServicesNetlogonJoinDomainvalue adaHKLM:SYSTEMCurrentControlSet LayananNetl ogonAvoidSpnSetvalue adaHKLM:SYSTEMCurrentControlSetControlComputerNameActiveComputerNameComputerNameValue ComputerName di HKLM:SYSTEMCurrentControlSetControlComputerNameComputerName berbeda
Karena kami telah mengidentifikasi jalur registri yang relevan, daripada menyisir registri secara manual karena Anda mungkin lupa memeriksa satu jalur registri atau lupa mana yang harus diperiksa, Anda dapat membuat dan menjalankan skrip Check-PendingReboot.ps1 menggunakan kode di bawah ini untuk mengotomatiskan tugas untuk memeriksa semua kunci registri dalam tabel di atas.
[CmdletBinding()]
parameter(
[Parameter(Wajib)]
[ValidasiNotNullOrEmpty()]
[string[]]$NamaKomputer,
[Parameter()]
[ValidasiNotNullOrEmpty()]
[pscredential]$Credential
)$ErrorActionPreference = `Berhenti`$scriptBlock = {$VerbosePreference = $menggunakan:VerbosePreference
function Test-RegistryKey {
[JenisKeluaran(`bool`)]
[CmdletBinding()]
param
(
[Parameter(Wajib)]
[ValidasiNotNullOrEmpty()]
[string]$Kunci
)
$ErrorActionPreference = `Stop`if (Get-Item -Path $Key -ErrorAction Abaikan) {
$benar
}
}function Test-RegistryValue {
[JenisKeluaran(`bool`)]
[CmdletBinding()]
param
(
[Parameter(Wajib)]
[ValidasiNotNullOrEmpty()]
[string]$Kunci,[Parameter(Wajib)]
[ValidasiNotNullOrEmpty()]
[string]$Nilai
)
$ErrorActionPreference = `Stop`if (Get-ItemProperty -Path $Key -Name $Value -ErrorAction Abaikan) {
$benar
}
}fungsi Test-RegistryValueNotNull {
[JenisKeluaran(`bool`)]
[CmdletBinding()]
param
(
[Parameter(Wajib)]
[ValidasiNotNullOrEmpty()]
[string]$Kunci,[Parameter(Wajib)]
[ValidasiNotNullOrEmpty()]
[string]$Nilai
)
$ErrorActionPreference = `Stop`if (($regVal = Get-ItemProperty -Path $Key -Name $Value -ErrorAction Abaikan) -and $regVal.($Value)) {
$benar
}
}# Menambahkan “test-path” ke setiap pengujian yang sejak saat itu tidak memanfaatkan fungsi kustom dari atas
# pengecualian dilemparkan saat Get-ItemProperty atau Get-ChildItem melewati jalur kunci yang tidak ada
$tes = @(
{ Test-RegistryKey -Key `HKLM:SOFTWAREMicrosoftWindowsCurrentVersionComponent Based ServicingRebootPending` }
{ Test-RegistryKey -Key `HKLM:SoftwareMicrosoftWindowsCurrentVersionComponent Based ServicingRebootInProgress` }
{ Test-RegistryKey -Key `HKLM:SOFTWAREMicrosoftWindowsCurrentVersionWindowsUpdateAuto UpdateRebootRequired` }
{ Test-RegistryKey -Key `HKLM:SoftwareMicrosoftWindowsCurrentVersionComponent Based ServicingPackagesPending` }
{ Test-RegistryKey -Key `HKLM:SOFTWAREMicrosoftWindowsCurrentVersionWindowsUpdateAuto UpdatePostRebootReporting` }
{ Test-RegistryValueNotNull -Key `HKLM:SYSTEMCurrentControlSetControlSession Manager` -Value `PendingFileRenameOperations`}
{ Test-RegistryValueNotNull -Key `HKLM:SYSTEMCurrentControlSetControlSession Manager` -Value `PendingFileRenameOperations2`}
{
# Menambahkan tes untuk memeriksa terlebih dahulu apakah ada kunci, menggunakan “Abaikan ErrorAction” akan salah mengembalikan $true
`HKLM:SOFTWAREMicrosoftPembaruan` | Where-Object { test-path $_ -PathType Container } | UntukSetiap-Objek {
(Get-ItemProperty -Path $_ -Name `UpdateExeVolatile` | Select-Object -ExpandProperty UpdateExeVolatile) -ne 0
}
}
{Test-RegistryValue -Key `HKLM:SOFTWAREMicrosoftWindowsCurrentVersionRunOnce` -Nilai `DVDRebootSignal`}
{ Test-RegistryKey -Key `HKLM:SOFTWAREMicrosoftServerManagerCurrentRebootAttemps` }
{ Test-RegistryValue -Key `HKLM:SYSTEMCurrentControlSetServicesNetlogon` -Value `JoinDomain`}
{Test-RegistryValue -Key `HKLM:SYSTEMCurrentControlSetServicesNetlogon` -Nilai `AvoidSpnSet`}
{
# Menambahkan tes untuk memeriksa terlebih dahulu apakah ada kunci, jika tidak setiap grup akan mengembalikan $Null
# Mungkin perlu mengevaluasi apa artinya jika salah satu atau kedua kunci ini tidak ada
( `HKLM:SYSTEMCurrentControlSetControlComputerNameActiveComputerName` | Where-Object { test-path $_ } | %{ (Get-ItemProperty -Path $_ ).ComputerName } ) -ne
( `HKLM:SYSTEMCurrentControlSetControlComputerNameComputerName` | Where-Object { Test-Path $_ } | %{ (Get-ItemProperty -Path $_ ).ComputerName } )
}
{
# Menambahkan tes untuk memeriksa terlebih dahulu apakah ada kunci
`HKLM:SOFTWAREMicrosoftWindowsCurrentVersionWindowsUpdateServicesPending` | Dimana-Objek {
(Test-Path $_) -dan (Get-ChildItem -Path $_) } | UntukSetiap-Objek { $true }
}
)foreach ($tes dalam $tests) {
Tulis-Verbose “Menjalankan blokir skrip: [$($test.ToString())]”
jika (& $tes) {
$benar
merusak
}
}
}foreach ($komputer dalam $ComputerName) {
mencoba {
$connParams = @{
`NamaKomputer` = $komputer
}
if ($PSBoundParameters.ContainsKey(`Credential`)) {
$connParams.Credential = $Credential
}$keluaran = @{
Nama Komputer = $komputer
IsPendingReboot = $false
}$psRemotingSession = PSSession Baru @connParams
if (-not ($output.IsPendingReboot = Invoke-Command -Session $psRemotingSession -ScriptBlock $scriptBlock)) {
$output.IsPendingReboot = $false
}
[pscustomobject]$output
} menangkap {
Write-Error -Message $_.Exception.Message
} Akhirnya {
if (Get-Variable -Name `psRemotingSession` -ErrorAction Abaikan) {
$psRemotingSession | Hapus-PSSession
}
}
}
Anda dapat menyediakan server sebanyak yang Anda inginkan melalui parameter ComputerName di skrip yang akan mengembalikan True atau False bersama dengan nama server. Anda dapat menjalankan skrip yang mirip dengan yang berikut ini dan memastikan PowerShell Remoting sudah diatur dan tersedia di server Anda.
PS51> .Test-PendingReboot.ps1 -Server SRV1,SRV2,SRV3,etc
Baca: Cara menjadwalkan skrip PowerShell di Penjadwalan Tugasr
By menggunakan skrip PowerShell, Anda dapat menanyakan satu atau semua komputer di domain atau memberikan nama server secara manual untuk menentukan mesin yang menunggu booting ulang. Setelah teridentifikasi, Anda kemudian dapat segera mem-boot ulang mesin atau membuat daftar untuk mem-boot ulang nanti.
Sekarang baca: Cara Me-restart komputer Windows dari Jarak Jauh menggunakan PowerShell
Apa artinya reboot Windows tertunda?
Umumnya, permintaan reboot yang tertunda terjadi ketika sebuah program atau penginstalan membuat perubahan pada file, kunci registri, layanan, atau pengaturan sistem operasi berpotensi meninggalkan sistem dalam keadaan sementara. Jika Anda mendapatkan notifikasi A pending reboot has been detected, ini hanya menunjukkan bahwa pembaruan sedang menunggu pada mesin dan reboot harus dilakukan sebelum pembaruan tambahan apa pun dapat diinstal. instal atau unduh, Inisialisasi, etc
Bagaimana cara memeriksa reboot yang tertunda di registri?
Anda dapat melakukan ini dengan mencari kunci RebootRequired di Windows Registry. Pada tabel di atas dalam posting ini, kami telah mengidentifikasi lokasi registri yang relevan untuk kunci registri reboot yang tertunda. Jika Anda ingin menampilkan pemberitahuan saat PC memerlukan mulai ulang untuk menyelesaikan penginstalan pembaruan Windows, klik Mulai > Pengaturan > Perbarui & keamanan > Pembaruan Windows > Opsi Lanjutan. Alihkan tombol ke aktif atau nonaktif untuk opsi Tampilkan pemberitahuan saat PC Anda memerlukan restart untuk menyelesaikan pemutakhiran.
Baca juga: Ada perbaikan sistem tertunda yang memerlukan reboot untuk menyelesaikannya.
Selengkapnya