Como verificar a reinicialização pendente no computador com Windows

Como Verificar A Reinicializacao Pendente No Computador Com Windows



Normalmente, depois que um usuário instala um driver, uma atualização (software ou sistema) ou software, ou faz algumas alterações de configuração em uma máquina cliente ou servidor Windows, o usuário será solicitado a reinicializar o sistema. Neste post, vamos orientá-lo através das etapas sobre como verifique se há reinicialização pendente em um computador com Windows .



  Como verificar a reinicialização pendente no computador com Windows





Como verificar a reinicialização pendente em um computador com Windows

Após a conclusão de muitas tarefas do sistema operacional Windows, às vezes o computador é forçado a exigir uma reinicialização. Enquanto estiver conectado e em uma sessão ativa, você será notificado de que uma reinicialização está pendente ou exigida por alguma caixa pop-up ou notificação - que você pode ignorar ou aceitar para reiniciar o Windows. Mas, em algumas situações em que você não deseja ou não pode reiniciar a máquina imediatamente - por exemplo, você tem algum trabalho inacabado que precisa concluir antes de reiniciar ou acabou de instalar atualizações em um servidor de produção e esse servidor pode 't ser reiniciado imediatamente.





Em cenários como este, especialmente no que diz respeito ao último, você pode esquecer a reinicialização e, posteriormente, perceber que alguns servidores ou máquinas clientes precisam ser reinicializados, mas agora você não consegue identificar qual das máquinas - nesta situação, você pode verificar a reinicialização pendente no computador com Windows usando um PowerShell roteiro.



outlook 2016 atrasar entrega

Agora, quando uma reinicialização estiver pendente, o Windows adicionará alguns valores de registro ou sinalizadores para indicar isso no seguinte local de registro com os valores e condições associados, conforme mostrado na tabela abaixo.

Chave Valor Doença
HKLM:\SOFTWARE\Microsoft\Atualizações UpdateExeVolatile O valor é qualquer coisa diferente de 0
HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager PendenteFileRenameOperations valor existe
HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager PendenteFileRenameOperations2 valor existe
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired QUE a chave existe
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Services\Pendente QUE Quaisquer subchaves GUID existem
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\PostRebootReporting QUE a chave existe
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce DVDRebootSignal valor existe
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending QUE a chave existe
HKLM:\Software\Microsoft\Windows\CurrentVersion\Serviço baseado em componentes\RebootInProgress QUE a chave existe
HKLM:\Software\Microsoft\Windows\CurrentVersion\Serviço baseado em componentes\Pacotes pendentes QUE a chave existe
HKLM:\SOFTWARE\Microsoft\ServerManager\CurrentRebootAttempts QUE a chave existe
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon JoinDomain valor existe
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon EvitarSpnSet valor existe
HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName Nome do computador Valor ComputerName em HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName é diferente

Como identificamos os caminhos de registro relevantes, em vez de vasculhar manualmente o registro porque você pode esquecer de verificar um caminho de registro ou apenas esquecer quais devem ser verificados, você pode criar e executar um script Check-PendingReboot.ps1 usando o código abaixo para automatizar a tarefa de verificar todas as chaves de registro na tabela acima.

  Criar e executar script do 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
}
}
}

Você pode fornecer quantos servidores quiser através do Nome do computador parâmetro no script que retornará Verdadeiro ou Falso juntamente com o nome do servidor. Você pode executar o script semelhante ao seguinte e certificar-se Remoção do PowerShell está configurado e disponível em seus servidores.

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

Ler : Como agendar o script do PowerShell no Agendador de Tarefas

Usando o script do PowerShell, você pode consultar um ou todos os computadores no domínio ou fornecer manualmente os nomes dos servidores para determinar as máquinas com reinicialização pendente. Uma vez identificado, você pode reiniciar as máquinas imediatamente ou fazer uma lista para reiniciar mais tarde.

mudar a cor da fonte no Outlook

Agora lê : Como reiniciar remotamente o computador com Windows usando o PowerShell

O que significa que uma reinicialização do Windows está pendente?

Geralmente, uma solicitação de reinicialização pendente ocorre quando um programa ou instalação faz uma alteração em arquivos, chaves de registro, serviços ou configurações do sistema operacional, deixando o sistema em um estado transitório. No caso de você obter o Uma reinicialização pendente foi detectada notificação, ela simplesmente indica que as atualizações estão pendentes na máquina e uma reinicialização deve ser executada antes que quaisquer atualizações adicionais possam ser instaladas.

Ler :

  • Como desabilitar ou habilitar notificação de reinicialização de atualização
  • Windows Update Pendente de instalação ou download, Inicializando, etc.

Como verificar as reinicializações pendentes no registro?

Você pode fazer isso por pesquisando no Registro do Windows para o Reinicialização Necessária chave. Na tabela acima nesta postagem, identificamos o local de registro relevante para chaves de registro de reinicialização pendentes. Se você quiser mostrar uma notificação quando seu PC exigir uma reinicialização para concluir a instalação de uma atualização do Windows, clique em Começar > Configurações > Atualização e segurança > Atualizações do Windows > Opções avançadas . Ative ou desative o botão para o Mostrar uma notificação quando seu PC exigir uma reinicialização para concluir a atualização opção.

Leia também : Há um reparo do sistema pendente que requer uma reinicialização para ser concluído .

como fazer um programa rodar no Windows 10 de inicialização
Publicações Populares