Как да проверите за чакащо рестартиране на компютър с Windows

Kak Da Proverite Za Cakaso Restartirane Na Komput R S Windows



Обикновено, след като потребителят инсталира драйвер, актуализация (софтуер или система) или софтуер, или направи някои промени в конфигурацията на Windows клиент или сървърна машина, потребителят ще бъде подканен да рестартира системата. В тази публикация ще ви преведем през стъпките как да проверете за чакащо рестартиране на компютър с Windows .



  Как да проверите за чакащо рестартиране на компютър с Windows





Как да проверите за чакащо рестартиране на компютър с Windows

При завършване на много задачи на Windows OS, понякога компютърът трябва да се рестартира. Докато сте влезли и сте в активна сесия, ще бъдете уведомени, че предстои рестартиране или се изисква от някакъв изскачащ прозорец или известие - което можете или да отхвърлите, или да приемете, за да рестартирате Windows. Но в някои ситуации, при които не искате или не можете незабавно да рестартирате машината - например имате някаква незавършена работа, която трябва да завършите, преди да рестартирате, или току-що сте инсталирали актуализации на производствен сървър и този сървър може не се рестартира веднага.





В сценарии като този, особено що се отнася до последното, може да забравите за рестартирането и по-късно да разберете, че някои сървъри или клиентски машини трябва да бъдат рестартирани, но сега не сте в състояние да идентифицирате коя от машините — в тази ситуация, можете да можете да проверите за чакащо рестартиране на компютър с Windows, като използвате a PowerShell сценарий.



Сега, когато предстои рестартиране, Windows ще добави някои стойности или флагове в системния регистър, за да посочи това в следното местоположение на системния регистър със свързаните стойности и условия, както е показано в таблицата по-долу.

Ключ Стойност Състояние
HKLM:\СОФТУЕР\Microsoft\Updates UpdateExeVolatile Стойността е нещо различно от 0
HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager PendingFileRenameOperations съществува стойност
HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager Чакащи операции за преименуване на файл2 съществува стойност
HKLM:\СОФТУЕР\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired ЧЕ ключът съществува
HKLM:\СОФТУЕР\Microsoft\Windows\CurrentVersion\WindowsUpdate\Services\Pending ЧЕ Съществуват всякакви GUID подключове
HKLM:\СОФТУЕР\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\PostRebootReporting ЧЕ ключът съществува
HKLM:\СОФТУЕР\Microsoft\Windows\CurrentVersion\RunOnce DVDRebootSignal съществува стойност
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending ЧЕ ключът съществува
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootInProgress ЧЕ ключът съществува
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\PackagesPending ЧЕ ключът съществува
HKLM:\СОФТУЕР\Microsoft\ServerManager\CurrentRebootAttempts ЧЕ ключът съществува
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon Присъединете се към домейн съществува стойност
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon Избягвайте SpnSet съществува стойност
HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName име на компютър Стойността ComputerName в HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName е различна

Тъй като идентифицирахме съответните пътища в регистъра, вместо ръчно да преглеждате регистъра, защото може да забравите да проверите един път в регистъра или просто да забравите кои да проверите, можете създайте и стартирайте скрипт Check-PendingReboot.ps1, използващ кода по-долу за автоматизиране на задачата за проверка на всички ключове в системния регистър в таблицата по-горе.

  Създайте и стартирайте 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
}
}
}

Можете да предоставите колкото желаете сървъри чрез име на компютър параметър в скрипта, който ще върне Вярно или Невярно заедно с името на сървъра. Можете да изпълните скрипта, подобен на следния, и да се уверите PowerShell Remoting е настроен и достъпен на вашите сървъри.

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

Прочети : Как да планирате скрипт на PowerShell в Task Scheduler

С помощта на скрипта PowerShell можете да направите запитване към един или всички компютри в домейна или ръчно да предоставите имената на сървъра, за да определите машините, чакащи рестартиране. Веднъж идентифицирани, можете да рестартирате машините веднага или да направите списък за рестартиране по-късно.

Сега прочетете : Как да рестартирате отдалечено компютър с Windows с помощта на PowerShell

Какво означава, че предстои рестартиране на Windows?

Обикновено чакаща заявка за рестартиране възниква, когато програма или инсталация направи промяна във файлове, ключове в системния регистър, услуги или настройки на операционната система, потенциално оставяйки системата в преходно състояние. В случай, че получите Открито е чакащо рестартиране известие, то просто показва, че актуализациите чакат на машината и трябва да се извърши рестартиране, преди да могат да бъдат инсталирани допълнителни актуализации.

Прочети :

xbox one kinect продължава да се изключва
  • Как да деактивирате или активирате известието за рестартиране на актуализацията
  • Актуализация на Windows Очаква инсталиране или изтегляне, инициализиране и т.н

Как да проверя чакащите рестартирания в системния регистър?

Можете да направите това чрез търсене в системния регистър на Windows за Изисква се рестартиране ключ. В таблицата по-горе в тази публикация сме идентифицирали съответното местоположение в системния регистър за чакащи ключове за рестартиране на системния регистър. Ако искате да покажете известие, когато вашият компютър изисква рестартиране, за да завърши инсталирането на актуализация на Windows, щракнете Започнете > Настройки > Актуализация и сигурност > Актуализации на Windows > Разширени опции . Включете или изключете бутона за Показване на известие, когато вашият компютър изисква рестартиране, за да завърши актуализирането опция.

Прочетете също : Предстои ремонт на системата, който изисква рестартиране, за да завърши .

Популярни Публикации