Что я могу запросить, чтобы увидеть, загружена ли Windows и выполняется ли обновление? - PullRequest
8 голосов
/ 14 марта 2019

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

Я нашел сервис AppReadiness, который останавливал его до перезагрузки сервера. Я обеспокоен тем, что, если он установлен на ручной, он не всегда запускается. Может кто-нибудь подтвердить, если это надежный сервис?

РЕДАКТИРОВАТЬ: Когда я писал это, я обнаружил, что он был остановлен, пока не появится сообщение «Работа над обновлениями, 100% завершено, не выключайте компьютер», но когда сервер завис на этом сообщении, Запущен сервис AppReadiness. Есть ли что-нибудь лучше, чтобы посмотреть? Я прочитал другие ответы на разные вопросы, скажем, чтобы проверить, доступен ли C $, но он будет доступен раньше, чем AppReadiness.

Код, который используется для проверки услуги:

$creds = Get-Credential -Message "Enter server credentials:" -UserName "SERVERNAME\Administrator"
Get-WmiObject Win32_Service -ComputerName "SERVERIPADDRESS" -Credential $creds | Where-Object {$_.Name -eq "AppReadiness"}

РЕДАКТИРОВАТЬ 2: Кроме того, вместо служб мониторинга я также пытался искать такие процессы, как winlogon.exe и loginui.exe, для получения указаний о состоянии сервера, но я не получаю результаты, которые я хочу записать. Эти процессы показывают, когда сервер готовится, когда я надеялся, что они будут показаны только после того, как GUI входа в систему станет видимым.

РЕДАКТИРОВАТЬ 3:

Это изменение предназначено для ответа @ Kelv.Gonzales, который заявил, что проверяет запись в журнале событий Windows «Служба клиента DHCPv4 запущена». Это не работает и находится на одном уровне с другими службами и событиями, которые я отслеживал. Показывает действительный до входа в систему.

Image Showing Windows Is Working On Updates When Event Is Posted

Мой код был:

$creds = Get-Credential -Message "Enter server credentials:" -UserName "SERVERNAME\Administrator"
$server = "IPADDRESSOFSERVER"

while($true)
{
    $event = Get-WmiObject Win32_NTLogEvent -ComputerName $server -Credential $creds -Filter "(logfile='System' AND eventcode = '50036')" | select -First 1
    $event.ConvertToDateTime($event.TimeWritten)
    Start-Sleep -Seconds 5
}

Ответы [ 2 ]

3 голосов
/ 20 марта 2019

Будет ли поиск 0 обновлений в очереди выполнить то, что вам нужно?Эта статья arcticle содержит подробные сведения о том, как ее выполнить.

Чтобы проверить, готова ли Windows войти в систему, вы можете запросить журнал событий для «Запущена служба клиента DHCPv4» - событиеID 50036 удовлетворяет, если окна готовы.

3 голосов
/ 15 марта 2019

Этот лайнер просто сработает один раз, конечно. Любая причина, по которой вы используете WMI вместо встроенного командлета PowerShell - Get-Service ?

Мое предложение состоит в том, чтобы использовать средство наблюдения за событиями WMI, используя то, что у вас уже есть, но предназначается для службы и любых зависимых служб и уведомляет вас об этом событии, когда выполняется состояние.

Использование PowerShell для мониторинга и реагирования на события на вашем сервере

В этой статье для этого используются PowerShell и VBScript, но вы можете сделать это со всеми PowerShell.

Вы можете иметь временного или постоянного наблюдателя.

PowerShell и события: подписки на временные события WMI

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

Базовый пример:

$TargetHost = $env:COMPUTERNAME
do {
    $TargetOperation = Get-WmiObject Win32_Service -ComputerName $TargetHost  | 
    Where-Object {$_.Name -eq "AppReadiness"}
    "Checking host $TargetHost for service/process $($TargetOperation.Name)"
    Start-Sleep -Seconds 3
} until (($TargetOperation).State -eq 'Running')
"Validation of host $TargetHost for service/process $($TargetOperation.Name) complete"

# Results

Checking host WS70 for service/process AppReadiness
Checking host WS70 for service/process AppReadiness
Checking host WS70 for service/process AppReadiness
Validation of host WS70 for service/process AppReadiness complete

Конечно, вы можете добавить столько сервисов или процессов, сколько захотите, используя логику работы.

Все вышесказанное относится практически ко всему, что вы хотели бы посмотреть. Сервисы, процессы, файл-папка.

Или просто используйте этот скрипт в цикле.

Получение статуса удаленного входа - Powershell

Этот скрипт вернет статус входа локального или удаленного машина. Типы возврата включают «Не вошли», «Заблокировано», «Зарегистрированы» вкл. и офлайн.

Самая полезная часть этого - проверить, находится ли компьютер в заблокированное состояние, хотя другие типы возврата также могут быть полезны.

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

Загрузить: GetRemoteLogonStatus.ps1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...