Как проверить ожидание перезагрузки на компьютере с Windows

Kak Proverit Ozidanie Perezagruzki Na Komp Utere S Windows



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



  Как проверить ожидание перезагрузки на компьютере с Windows





Как проверить ожидание перезагрузки на компьютере с Windows

По завершении многих задач ОС Windows иногда компьютер вынужденно требует перезагрузки. Во время входа в систему и в активном сеансе вы будете уведомлены о том, что перезагрузка ожидается или требуется, в каком-либо всплывающем окне или уведомлении, которое вы можете либо отклонить, либо принять для перезапуска Windows. Но в некоторых ситуациях, когда вы не хотите или не можете немедленно перезагрузить машину — например, у вас есть незавершенная работа, которую необходимо выполнить перед перезагрузкой, или вы только что установили обновления на рабочем сервере, и этот сервер может не перезагружаться сразу.





конвертировать psd в jpg без фотошопа

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



Теперь, когда ожидается перезагрузка, Windows добавит некоторые значения или флаги реестра, чтобы указать это, в следующем месте реестра с соответствующими значениями и условиями, как показано в таблице ниже.

Ключ Ценить Состояние
HKLM:\ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ\Майкрософт\Обновления ОбновлениеExeVolatile Значение может быть любым, кроме 0
HKLM:\SYSTEM\CurrentControlSet\Control\Диспетчер сеансов PendingFileRenameOperations значение существует
HKLM:\SYSTEM\CurrentControlSet\Control\Диспетчер сеансов PendingFileRenameOperations2 значение существует
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired ЧТО ключ существует
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Services\Pending ЧТО Существуют любые подразделы GUID
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\PostRebootReporting ЧТО ключ существует
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce DVDRebootSignal значение существует
HKLM:\Software\Microsoft\Windows\CurrentVersion\Компонентное обслуживание\RebootPending ЧТО ключ существует
HKLM:\Software\Microsoft\Windows\CurrentVersion\Компонентное обслуживание\RebootInProgress ЧТО ключ существует
HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\PackagesPending ЧТО ключ существует
HKLM:\SOFTWARE\Microsoft\ServerManager\CurrentRebootAttempts ЧТО ключ существует
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon Присоединиться к домену значение существует
HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon Избежатьспнсет значение существует
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 настроен и доступен на ваших серверах.

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

Читать : Как запланировать сценарий PowerShell в планировщике заданий

бесплатная программа для чтения epub для Windows 10

Используя сценарий PowerShell, вы можете запросить один или все компьютеры в домене или вручную указать имена серверов, чтобы определить компьютеры, ожидающие перезагрузки. После идентификации вы можете сразу же перезагрузить машины или составить список для перезагрузки позже.

Теперь прочитайте : Как удаленно перезагрузить компьютер Windows с помощью PowerShell

Что значит ожидается перезагрузка Windows?

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

Читать :

  • Как отключить или включить уведомление о перезапуске обновления
  • Центр обновления Windows, ожидающий установки или загрузки, инициализация и т. д.

Как проверить отложенные перезагрузки в реестре?

Вы можете сделать это, поиск в реестре Windows для RebootRequired ключ. В таблице выше в этом посте мы определили соответствующее расположение реестра для ключей реестра, ожидающих перезагрузки. Если вы хотите, чтобы отображалось уведомление, когда ваш компьютер требует перезагрузки для завершения установки обновления Windows, щелкните Начинать > Настройки > Обновление и безопасность > Обновления Windows > Расширенные настройки . Включите или выключите кнопку для Показывать уведомление, когда ваш компьютер требует перезагрузки для завершения обновления вариант.

Также читайте : Ожидается восстановление системы, для завершения которого требуется перезагрузка. .

Популярные посты