Come verificare il riavvio in sospeso su un computer Windows

Come Verificare Il Riavvio In Sospeso Su Un Computer Windows



Di solito, dopo che un utente installa un driver, un aggiornamento (software o sistema) o un software o apporta alcune modifiche alla configurazione su un computer client o server Windows, all'utente verrà richiesto di riavviare il sistema. In questo post, ti guideremo attraverso i passaggi su come farlo controlla il riavvio in sospeso su un computer Windows .



  Come verificare il riavvio in sospeso su un computer Windows





firefox nightly vs aurora

Come controllare il riavvio in sospeso su un computer Windows

Al completamento di molte attività del sistema operativo Windows, a volte il computer è costretto a richiedere un riavvio. Dopo aver effettuato l'accesso e in una sessione attiva, verrai avvisato che un riavvio è in sospeso o richiesto da una finestra popup o notifica, che puoi ignorare o accettare per riavviare Windows. Tuttavia, in alcune situazioni in cui non si desidera o non è possibile riavviare immediatamente la macchina, ad esempio, è necessario completare del lavoro incompiuto prima del riavvio oppure si sono appena installati gli aggiornamenti su un server di produzione e tale server può essere riavviato subito.





In scenari come questo, soprattutto per quanto riguarda quest'ultimo, potresti dimenticare il riavvio e in un secondo momento ti rendi conto che alcuni server o macchine client devono essere riavviati ma ora non sei in grado di identificare quale delle macchine - in questa situazione, puoi essere in grado di verificare la presenza di riavvio in sospeso su computer Windows utilizzando a PowerShell copione.



Ora, quando un riavvio è in sospeso, Windows aggiungerà alcuni valori o flag di registro per indicarlo nella seguente posizione del registro con i valori e le condizioni associati, come mostrato nella tabella seguente.

Chiave Valore Condizione
HKLM:\SOFTWARE\Microsoft\Aggiornamenti UpdateExeVolatile Il valore è qualsiasi cosa diversa da 0
HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager PendingFileRenameOperations il valore esiste
HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager Operazioni di ridenominazione file in sospeso2 il valore esiste
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Aggiornamento automatico\RebootRequired QUELLO chiave esiste
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Services\In sospeso QUELLO Esistono eventuali sottochiavi GUID
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Aggiornamento automatico\PostRebootReporting QUELLO chiave esiste
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce DVDRebootSignal il valore esiste
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending QUELLO chiave esiste
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootInProgress QUELLO chiave esiste
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\PackagesPending QUELLO chiave esiste
HKLM:\SOFTWARE\Microsoft\ServerManager\CurrentRebootAttempts QUELLO chiave esiste
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon UnisciDominio il valore esiste
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon EvitaSpnSet il valore esiste
HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName Nome del computer Il valore ComputerName in HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName è diverso

Poiché abbiamo identificato i percorsi di registro pertinenti, invece di sfogliare manualmente il registro perché potresti dimenticare di controllare un percorso di registro o semplicemente dimenticare quali controllare, puoi creare ed eseguire uno script Check-PendingReboot.ps1 utilizzando il codice seguente per automatizzare l'attività di controllo di tutte le chiavi di registro nella tabella precedente.

  Crea ed esegui lo script 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
}
}
}

Puoi fornire tutti i server che desideri tramite il Nome del computer parametro nello script che restituirà VERO O Falso insieme al nome del server. Puoi eseguire lo script simile al seguente e assicurarti Servizi remoti di PowerShell è configurato e disponibile sui tuoi server.

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

Leggere : Come pianificare lo script PowerShell nell'Utilità di pianificazione

alternativa alla penna di superficie

Utilizzando lo script di PowerShell, è possibile interrogare uno o tutti i computer nel dominio o fornire manualmente i nomi dei server per determinare i computer in attesa di riavvio. Una volta identificato, puoi quindi riavviare subito le macchine o creare un elenco per riavviare in seguito.

Ora leggi : Come riavviare in remoto un computer Windows utilizzando PowerShell

Cosa significa che è in sospeso un riavvio di Windows?

In genere, una richiesta di riavvio in sospeso si verifica quando un programma o un'installazione apporta una modifica a file, chiavi di registro, servizi o impostazioni del sistema operativo lasciando potenzialmente il sistema in uno stato transitorio. Nel caso in cui ottieni il È stato rilevato un riavvio in sospeso notifica, indica semplicemente che gli aggiornamenti sono in sospeso sulla macchina e che è necessario eseguire un riavvio prima di poter installare eventuali aggiornamenti aggiuntivi.

Leggere :

  • Come disabilitare o abilitare la notifica di riavvio dell'aggiornamento
  • Windows Update In attesa di installazione o download, inizializzazione, ecc

Come controllare i riavvii in sospeso nel registro?

Puoi farlo tramite cercando nel registro di Windows per il RiavvioObbligatorio chiave. Nella tabella sopra in questo post, abbiamo identificato la posizione del registro pertinente per le chiavi di registro di riavvio in attesa. Se vuoi mostrare una notifica quando il tuo PC richiede un riavvio per completare l'installazione di un aggiornamento di Windows, fai clic su Inizio > Impostazioni > Aggiornamento e sicurezza > Aggiornamenti di Windows > Opzioni avanzate . Attiva o disattiva il pulsante per il Mostra una notifica quando il tuo PC richiede un riavvio per completare l'aggiornamento opzione.

Leggi anche : C'è una riparazione del sistema in sospeso che richiede un riavvio per essere completata .

Messaggi Popolari