Как узнать, требуется ли перезагрузка удаленному компьютеру

Знать, когда перезагружать компьютер, очевидно, но как определить, нужна ли перезагрузка удаленному компьютеру? Системному администратору может быть очень полезно знать, какой сервер или рабочая станция ожидает перезагрузки, завершить ли обычное обновление Windows или новую установку программного обеспечения.

На панели задач разбросано несколько разделов реестра, указывающих на ожидающую перезагрузку. Вот два из них:

Клавиша RebootPending по адресу:

 HKLM  Software  Windows  CurrentVersion  Component Based Servicing 

И ключ RebootRequired в:

 HKLM  Software  Windows  CurrentVersion  WindowsUpdate  Auto Update 

Если какой-либо из ключей существует в соответствующем месте, для этого компьютера требуется перезагрузка. И PowerShell вполне может проверить их наличие с помощью одной строки, как показано ниже:

 Test-Path 'HKLM:  SOFTWARE  Microsoft  Windows  CurrentVersion  Component Based Servicing  RebootPending' 

Или

 Test-Path 'HKLM:  SOFTWARE  Microsoft  Windows  CurrentVersion  WindowsUpdate  Auto Update  RebootRequired' 

Возвращение True означает, что вашему локальному компьютеру требуется перезагрузка.

Чтобы выполнить тот же командлет на удаленном компьютере, вам понадобится помощь от Invoke-Command , например:

 $ command = {Test-Path 'HKLM:  SOFTWARE   Microsoft  Windows  CurrentVersion  Component Based Servicing  RebootPending '} Invoke-Command -computer ComputerName -ScriptBlock $ command 

Очевидно, что для успешного выполнения Invoke-Command вам необходимо включить PSRemoting/WinRM на удаленном компьютере.

Связывание всех вместе, вот фрагмент, который вы c использование для проверки и определения необходимости перезагрузки удаленного компьютера, чтобы завершить то, что он делал.

  $ pendingReboot = @ (@ {Name = 'Reboot Pending Status:'  Test = {Test-Path 'HKLM:  SOFTWARE  Microsoft  Windows  CurrentVersion  Component Based Servicing  RebootPending'}} @ {Name = 'Требуется перезагрузка для обновления Windows:' Test = {Test-Path 'HKLM:  SOFTWARE   Microsoft  Windows  CurrentVersion  WindowsUpdate  Auto Update  RebootRequired '}}) $ computername = "ComputerName" $ ​​session = New-PSSession -Computer $ computernameforeach ($ test в $ pendingReboot) {$ result = Invoke-Command -Session $ session  -ScriptBlock $ test.Test $ test.Name + $ result}  

Результат будет выглядеть так:

Наконец, спасибо 4sysops за то, что поделились идеей. Однако у меня возникли проблемы с использованием их кода, поэтому я выбрал другой путь, чтобы получить тот же результат.

Оцените статью
toodcast.ru
Добавить комментарий