Normalt, efter at en bruger har installeret en driver, en opdatering (software eller system) eller software eller foretager nogle konfigurationsændringer på en Windows-klient eller servermaskine, vil brugeren blive bedt om at genstarte systemet. I dette indlæg vil vi guide dig gennem trinene til, hvordan du gør tjek for Ventende genstart på en Windows-computer .
Sådan tjekker du for afventende genstart på en Windows-computer
Efter afslutning af mange Windows OS-opgaver er computeren nogle gange tvunget til at kræve en genstart. Mens du er logget ind og i en aktiv session, vil du blive underrettet om, at en genstart afventer eller påkrævet af en pop op-boks eller meddelelse - som du enten kan afvise eller acceptere for at genstarte Windows. Men i nogle situationer, hvor du ikke ønsker eller ikke umiddelbart kan genstarte maskinen — for eksempel har du noget ufærdigt arbejde, du skal udføre, før du genstarter, eller du har lige installeret opdateringer på en produktionsserver, og den server kan ikke genstartes med det samme.
I scenarier som dette, især når det drejer sig om sidstnævnte, kan du glemme alt om genstarten og på et senere tidspunkt indse, at nogle servere eller klientmaskiner skal genstartes, men du er nu ikke i stand til at identificere hvilken af maskinerne - i denne situation, du kan være i stand til at tjekke for Ventende genstart på Windows-computer ved hjælp af en PowerShell manuskript.
Nu, når en genstart afventer, tilføjer Windows nogle registreringsværdier eller flag for at indikere det på følgende registreringsdatabaseplacering med de tilknyttede værdier og betingelser som vist i tabellen nedenfor. Nøgle Værdi Tilstand HKLM:\SOFTWARE\Microsoft\Updates UpdateExeVolatile Værdien er alt andet end 0 HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager PendingFileRenameOperations værdi findes HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager PendingFileRenameOperations2 værdi findes HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired AT nøgle findes HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Services\Pending AT Der findes alle GUID-undernøgler HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\PostRebootReporting AT nøgle findes HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce DVDRebootSignal værdi findes HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending AT nøgle findes HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootInProgress AT nøgle findes HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\PackagesPending AT nøgle findes HKLM:\SOFTWARE\Microsoft\ServerManager\CurrentRebootAttempts AT nøgle findes HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon JoinDomain værdi findes HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon UndgåSpnSet værdi findes HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName Computernavn Værdi ComputerName i HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName er anderledes
Da vi har identificeret de relevante registreringsstier, kan du i stedet for manuelt at kæmme gennem registreringsdatabasen, fordi du glemmer at kontrollere en registreringssti eller bare glemmer, hvilke du skal kontrollere. skabe og køre et Check-PendingReboot.ps1-script ved hjælp af koden nedenfor for at automatisere opgaven for at kontrollere alle registreringsdatabasenøglerne i tabellen ovenfor.
hvordan man installerer apache på Windows 10
[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 } } }
Du kan levere så mange servere som du vil via Computernavn parameter i scriptet, som vil returnere Rigtigt eller Falsk sammen med servernavnet. Du kan udføre scriptet svarende til det følgende og sikre dig PowerShell fjernbetjening er sat op og tilgængelig på dine servere.
PS51> .\Test-PendingReboot.ps1 -Server SRV1,SRV2,SRV3,etc
Læs : Sådan planlægges PowerShell-script i Task Scheduler
Ved at bruge PowerShell-scriptet kan du forespørge på en eller alle computere i domænet eller manuelt angive servernavnene for at bestemme maskinerne, der afventer en genstart. Når de er identificeret, kan du derefter genstarte maskinerne med det samme eller lave en liste for at genstarte senere.
undtagelsen ukendt softwareundtagelse
Læs nu : Sådan fjernstartes Windows-computeren ved hjælp af PowerShell
Hvad betyder det, at en Windows-genstart afventer?
Generelt opstår en afventende genstartsanmodning, når et program eller en installation foretager en ændring af filer, registreringsnøgler, tjenester eller operativsystemindstillinger, hvilket potentielt efterlader systemet i en forbigående tilstand. I tilfældet får du En afventende genstart er blevet registreret meddelelse, angiver det blot, at der afventer opdateringer på maskinen, og en genstart skal udføres, før yderligere opdateringer kan installeres.
Læs :
- Sådan deaktiveres eller aktiveres opdateringsgenstartsmeddelelse
- Windows Update afventer installation eller download, initialisering osv
Hvordan kontrollerer man afventende genstarter i registreringsdatabasen?
Du kan gøre dette ved søgning i Windows-registreringsdatabasen for Genstart påkrævet nøgle. I tabellen ovenfor i dette indlæg har vi identificeret den relevante placering i registreringsdatabasen for afventende genstart af registreringsdatabasenøgler. Hvis du vil vise en meddelelse, når din pc kræver en genstart for at fuldføre en Windows-opdateringsinstallation, skal du klikke Start > Indstillinger > Opdatering og sikkerhed > Windows-opdateringer > Avancerede indstillinger . Slå knappen til eller fra for Vis en meddelelse, når din pc kræver en genstart for at afslutte opdateringen mulighed.
Læs også : Der afventer en systemreparation, som kræver en genstart for at fuldføre .