Я работаю над процессом автоматизации на С#, который собирается удаленно перезагрузить сервер Windows (2008/2012/2016), и мне нужно дождаться, пока этот сервер вернется в сеть, прежде чем продолжить.
Я знаю, что «возврат в онлайн» может быть неоднозначным, поэтому для моих требований мне нужно, чтобы сервер вернулся на экран Ctrl-Alt-Del. Это делается для того, чтобы сервер находился в согласованном состоянии перед продолжением. По моему опыту, есть несколько факторов, которые могут помешать серверу выйти на этот экран, например, установка обновлений Windows, которые застревают в цикле перезагрузки или застревают в «Ожидание локального диспетчера сеансов» и т. д.
Я провел несколько дней, изучая это безрезультатно:
- Очевидно, что сервер начинает отвечать на пинг-запросы до того, как он станет доступен.
- Время загрузки системы происходит до того, как сервер достигнет желаемого состояния.
- Любые события, указывающие на загрузку системы, регистрируются до желаемого состояния.
- Я не могу просто опросить важную службу — когда Windows применяет обновления компьютера перед входом в систему, эти службы могут быть уже запущены. Кроме того, иногда сервер перезагружается во время установки обновлений на этом этапе, что может привести к ложным срабатываниям.
- Опрос активности ЦП также может привести к ложным срабатываниям или вызвать задержки.
Можно ли каким-либо образом обнаружить, что сервер Windows завершил загрузку и доступен для интерактивного входа в систему?