Мы планируем автоматизировать создание виртуальных машин для нашей инфраструктуры сборки, чтобы мы могли:
Одним из шагов в этом процессе является автоматизация создания базовых образов виртуальных машин (в нашем случае с использованием Hyper-V). Для этого у нас есть сценарий, который:
Проблема, с которой мы сталкиваемся, находится на шагах 6 и 9. В идеале мы ждем завершения всей конфигурации, прежде чем перезагружать / выключать машину, но, похоже, нет способа определить, что Windows завершила этап настройки.
При прохождении через пользовательский интерфейс очень ясно, когда выполняется какой-либо шаг, потому что пользовательский интерфейс входа в систему не отображается, пока процесс не будет готов. Однако при использовании WinRM для удаленного подключения к машине это менее очевидно, потому что WinRM предоставляет доступ к машине до того, как будет завершена работа по настройке.
Итак, вопрос в том, каков наиболее надежный способ обнаружить через удаленное соединение, что Windows завершила настройку обновлений и т. Д., Чтобы мы могли перезагрузить / выключить машину, не вызывая проблем в дальнейшем.
------ РЕДАКТИРОВАТЬ -----
В конце концов, мы используем модифицированную версию ответа Кэтрин в том смысле, что наш сценарий также ожидает windeploy
и ngen
завершить. При условии ngen
не завершается до тех пор, пока ОС не завершит инициализацию, которая работает, и в качестве бонуса окончательный VHDX будет иметь всю платформу .NET ngen-ed, что означает, что нам не нужно иметь дело с этим, когда мы создаем новые виртуальные машины диск шаблона. Оба сценария, которые мы используем для создания Шаблон VHDX и скрипты для создания локальная тестовая среда есть на github, если кому-то интересно.
Это может показаться странным ответом, но ...
Есть сценарий PowerShell для проверки наличия доступных обновлений для Nagios.. Вероятно, вы могли бы использовать этот скрипт или его вариант для своих целей без Nagios.
Что касается того, выполняются ли они, проверьте, запущены ли Wuauclt и TrustedInstaller. Здесь могут помочь советы Microsoft по поводу обновлений Server Core.:
В зависимости от установленных обновлений вам может потребоваться перезагрузить компьютер, хотя система не уведомит вас об этом. Чтобы определить, завершен ли процесс установки, используйте диспетчер задач, чтобы убедиться, что процессы Wuauclt или Trusted Installer не выполняются активно. Вы также можете использовать методы из раздела «Просмотр установленных обновлений» для проверки списка установленных обновлений.
Вы, вероятно, можете получить эту информацию с помощью чего-то вроде Get-Process -Computername YourImage TrustedInstaller.exe
. После завершения процессов Wuauclt и TrustedInstaller можно безопасно перезагрузиться.
Каждое исправление обновления Windows будет записывать несколько событий в журнал событий установки.
Один из способов определить, были ли применены все исправления, - это зациклить проверку идентификатора события 4. Сравните время этого события с текущим временем. Если в течение 5 или 10 минут не было записано ни одного события с идентификатором 4, то все исправления, вероятно, выполнены и готовы к перезагрузке.
Я не понимаю, хотите ли вы выполнить первую перезагрузку после установки исправлений (событие 4) или вторую перезагрузку после их настройки (событие 2). Этот код делает первое. Просто измените filterHashTable на событие с идентификатором 2 для другой перезагрузки перед шагом 10.
$target = "bart"
$found = $false
while (-not $found) {
$lastEvent4 = (get-winevent -comp $target -maxEvents 1 -filterHashTable @{ Logname='Setup'; id = '4';}).timeCreated
if (((get-date) - $lastEvent4).totalMinutes -gt 10) {
"do reboot"
restart-computer -comp -$target
$found = $true
} else {
"wait"
start-sleep 60
}
}
У меня был хороший успех со следующим подходом: подождите, пока Windows не изменит тип запуска службы установщика модулей Windows (также известный как TrustedInstaller) на ручной (запуск по требованию) - после перезагрузки. На этом установка обновлений завершена.
Иногда процесс надежного установщика продолжает выполняться после установки исправлений? Однако тип запуска службы по-прежнему сбрасывается на Вручную.
Вы можете сами убедиться, является ли приведенное выше наблюдение последовательным / правильным, просмотрев предыдущие сообщения журнала событий и сопоставив события между журналами системы и журналами установки.
Изменение при запуске установщика модуля Windows регистрируется как системное событие 7040, и оно соотносится с последним событием 2 в журнале установки после перезагрузки.
Я думаю, что при первой установке обновлений эта служба настроена на «Автозапуск» на случай, если потребуется перезагрузка. При установке последнего патча он снова устанавливается на «Вручную» (независимо от того, требовалась ли перезагрузка).
На некоторых серверах я заметил, что запуск доверенного установщика быстро переключается с ручного на автоматический и обратно, и это может происходить примерно каждый час. Я подозреваю, что это какое-то приложение, которое регулярно проверяет наличие обновлений. Но, по моему опыту, в целом кажется безопасным предположить, что если запуск выполняется вручную, то исправления не происходит.