none
Как узнать (Powershell, …), что на удаленном Windows-сервере (2016/2019) после перезагрузки загрузился экран блокировки? RRS feed

  • Вопрос

  • Есть задача отследить готовность Windows-серверов после установки обновлений. В простом случае этапы установки обновлений следующие:
    1. Ручной запуск установки обновлений
    2. Ручная перезагрузка сервера
    3. Автоматическая доустановка обновлений
    4. Экран блокировки

    Но иногда сценарий бывает более сложным:
    1. Ручной запуск установки обновлений
    2. Ручная перезагрузка сервера
    3. Автоматическая доустановка обновлений
    4. Автоматическая перезагрузка сервера
    5. Автоматическая доустановка обновлений
    6. Экран блокировки
    Во-время этапа Автоматической доустановки работают все те же службы, что и когда уже отобразился экран блокировки. Собственно вопрос в том как понять, что процесс установки обновлений завершился полностью (отображается экран блокировки), т.е. что все этапы "автоматической доустановки" завершены и автоматических перезагрузок больше не будет? Пробовал отслеживать процесс TiWorker, но после появления экрана блокировки он иногда продолжает работать 5 минут (приемлемо), а иногда до нескольких часов (неприемлемо).


    • Изменено An_So 12 мая 2021 г. 11:58 Смена языка на русский

Все ответы

  • 1 установку обновлений можно отдать на откуп WSUS + GPO, ручная установка обновлений это рудимент.

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

    3 это русскоязычный форум. англоязычный мигрировал на Q&A


    The opinion expressed by me is not an official position of Microsoft

    Модератор
  • "1. ручная установка обновлений это рудимент."

    Обновления ставятся на хосты Hyper-V кластера, поэтому "ручник", который хотелось бы автоматизировать. 

    "2. если вы ставите обновы и трекаете сервис который иногда живет 5 дополнительных минут, то это вполне себе решение."

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

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

    "10-15 минут", я бы сказал: подождать какое-то время, поскольку оно всегда разное - зависит от ... А вот какое время, это вопрос. 

    3 это русскоязычный форум. англоязычный мигрировал на Q&A

    Спасибо за замечание, поправил. 


    • Изменено An_So 12 мая 2021 г. 12:15
  • "10-15 минут", я бы сказал: подождать какое-то время, поскольку оно всегда разное - зависит от ... А вот какое время, это вопрос. 

    $timeout = 60
    $ServerName = "server1"
    $PingSucceeded = $False
    do {
       if (Test-NetConnection $ServerName){
          $PingSucceeded = $true
          start-sleep -s 300
          # check service or registry keys
       } else {
          write-host "Waiting 4 reboot. Timeout in $timeout min."
          start-sleep -s 60
          $timeout--
       }
    } until ($timeout -le 0)

    Синтаксис приблизительный, для того чтобы показать логику

    В плане нод кластера создаете 2 или 3 групповые политики для автоматической установки обновлений в разные дни (понедельник\среда\пятница или вторник\четверг). С вечера апрувите обновы за день до установки, сбрасываете нагрузку с нода на соседей и ждете день.

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

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


    The opinion expressed by me is not an official position of Microsoft

    Модератор
  • Спасибо за ответы. У меня скрипт примерно так и работает, и не хватает как раз вот этого: "# check service or registry keys". :)

    Сейчас в общих чертах так:

    $CurrentHost = Get-SCVMHost -ComputerName $Server.Name -ErrorAction SilentlyContinue
    
    # После того как отправили хост в перезагрузку 
    $TiWorker = $true 
    While ((($CurrentHost.ComputerState -ne "Responding") -or ($CurrentHost.CommunicationState -ne "Responding") -or ($CurrentHost.ClusterNodeStatus -ne "Paused") -or
     ($TiWorker)) -and ($TimeOut -gt 0)) 
    { 
       sleep $x
    
       if ($CurrentHost.ComputerState -eq "Responding") 
       {
          $TiWorker = (Get-Process -ComputerName $Server.Name | select ProcessName | ?{$_.ProcessName -eq "TiWorker"}).ProcessName
       } 
    }

    И все бы было хорошо, если бы TiWorker иногда не зависал на часы :( Собственно интересует, как раз то, как еще кроме TiWorker можно проверить, что обновление завершено и автоперезагрузок больше не будет (отображается экран блокировки)?

    • Изменено An_So 12 мая 2021 г. 15:41 Форматирование текста