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 .
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.
[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 .