Så här söker du efter väntande omstart på Windows-dator

Sa Har Soker Du Efter Vantande Omstart Pa Windows Dator



Vanligtvis, efter att en användare har installerat en drivrutin, en uppdatering (programvara eller system) eller programvara, eller gjort vissa konfigurationsändringar på en Windows-klient eller serverdator, kommer användaren att uppmanas att starta om systemet. I det här inlägget kommer vi att gå igenom stegen för hur du gör kolla efter väntande omstart på en Windows-dator .



  Så här söker du efter väntande omstart på Windows-dator





Så här söker du efter väntande omstart på en Windows-dator

När många Windows OS-uppgifter har slutförts, tvingas datorn ibland kräva en omstart. När du är inloggad och i en aktiv session kommer du att meddelas om att en omstart väntar eller krävs av någon popup-ruta eller avisering - som du antingen kan avvisa eller acceptera för att starta om Windows. Men i vissa situationer där du inte vill eller omedelbart kan starta om maskinen — till exempel har du en del oavslutat arbete som du måste slutföra innan du startar om, eller så har du precis installerat uppdateringar på en produktionsserver och den servern kan inte startas om direkt.





I sådana här scenarier, särskilt när det gäller det senare, kan du glömma omstarten och vid ett senare tillfälle inse att vissa servrar eller klientdatorer måste startas om men du kan nu inte identifiera vilken av maskinerna — i den här situationen, du kan leta efter väntande omstart på Windows-datorn med hjälp av en PowerShell manus.



Nu, när en omstart väntar, kommer Windows att lägga till några registervärden eller flaggor för att indikera det på följande registerplats med tillhörande värden och villkor som visas i tabellen nedan.

Nyckel Värde Skick
HKLM:\SOFTWARE\Microsoft\Updates UpdateExeVolatile Värdet är något annat än 0
HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager PendingFileRenameOperations värde finns
HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager PendingFileRenameOperations2 värde finns
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired DEN DÄR nyckel finns
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Services\Pending DEN DÄR Alla GUID-undernycklar finns
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\PostRebootReporting DEN DÄR nyckel finns
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce DVDRebootSignal värde finns
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending DEN DÄR nyckel finns
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootInProgress DEN DÄR nyckel finns
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\PackagesPending DEN DÄR nyckel finns
HKLM:\SOFTWARE\Microsoft\ServerManager\CurrentRebootAttempts DEN DÄR nyckel finns
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon Gå med i domän värde finns
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon UndvikSpnSet värde finns
HKLM:\SYSTEM\CurrentControlSet\Control\Datornamn\ActiveComputerName Datornamn Värdet datornamn i HKLM:\SYSTEM\CurrentControlSet\Control\Datornamn\Datornamn är annorlunda

Eftersom vi har identifierat de relevanta registersökvägarna, istället för att manuellt kamma igenom registret eftersom du kanske glömmer att kontrollera en registersökväg eller bara glömmer vilka du ska kontrollera, kan du skapa och köra ett Check-PendingReboot.ps1-skript med koden nedan för att automatisera uppgiften att kontrollera alla registernycklar i tabellen ovan.

  Skapa och kör PowerShell-skript



[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 tillhandahålla så många servrar du vill via Datornamn parameter i skriptet som kommer att returnera Sann eller Falsk tillsammans med servernamnet. Du kan köra skriptet som liknar följande och se till PowerShell-fjärrkontroll är konfigurerad och tillgänglig på dina servrar.

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

Läsa : Hur man schemalägger PowerShell-skript i Task Scheduler

Genom att använda PowerShell-skriptet kan du fråga en eller alla datorer i domänen eller manuellt ange servernamnen för att avgöra vilka maskiner som väntar på en omstart. När du har identifierat dem kan du starta om maskinerna direkt eller göra en lista för att starta om senare.

Läs nu : Hur man fjärrstartar om Windows-datorn med PowerShell

Vad betyder det att en Windows-omstart väntar?

I allmänhet inträffar en väntande omstartsbegäran när ett program eller en installation gör en ändring av filer, registernycklar, tjänster eller operativsysteminställningar som eventuellt lämnar systemet i ett övergående tillstånd. I det fall du får En väntande omstart har upptäckts meddelande indikerar det helt enkelt att uppdateringar väntar på maskinen och en omstart måste utföras innan några ytterligare uppdateringar kan installeras.

Läsa :

  • Så här inaktiverar eller aktiverar du meddelande om uppdatering omstart
  • Windows Update väntar på installation eller nedladdning, initiering osv

Hur kontrollerar man väntande omstarter i registret?

Du kan göra detta genom att söka i Windows-registret för Omstart krävs nyckel. I tabellen ovan i det här inlägget har vi identifierat den relevanta registerplatsen för väntande omstart av registernycklar. Om du vill visa ett meddelande när din dator kräver omstart för att slutföra en Windows-uppdateringsinstallation klickar du på Start > inställningar > Uppdatering & säkerhet > Windows-uppdateringar > Avancerade alternativ . Slå på eller av knappen för att Visa ett meddelande när din dator kräver omstart för att slutföra uppdateringen alternativ.

Läs också : Det finns en systemreparation på gång som kräver en omstart för att slutföra .

Populära Inlägg