Planujemy zautomatyzować tworzenie maszyn wirtualnych dla naszej infrastruktury kompilacji, abyśmy mogli:
- Skaluj zasoby kompilacji na podstawie zapotrzebowania, np. Dodając więcej agentów kompilacji, gdy jest to wymagane, i usuwając je, gdy nie są wymagane
- Odtworzyć całość lub część środowiska kompilacji, jeśli / kiedy maszyny umrą
- Zduplikuj środowisko kompilacji, gdy potrzebujemy konfiguracji testowej
Jednym z kroków tego procesu jest automatyzacja tworzenia podstawowych obrazów maszyn wirtualnych (w naszym przypadku przy użyciu funkcji Hyper-V). Do tego mamy skrypt, który:
- Tworzy nowy VHDX z ISO za pomocą skryptu Convert-WindowsImage . Obecnie korzystamy z systemu Windows 2012R2, ale zaczniemy od 2016 roku, gdy tylko będzie dostępny.
- Dodaje skrypt nienadzorowany do nowego VHDX ze wszystkimi potrzebnymi konfiguracjami podstawowymi
- Aktualizuje VHDX o najnowsze łaty systemu Windows za pomocą skryptu Apply-WindowsUpdate
- Tworzy nową maszynę wirtualną Hyper-V na podstawie VHDX i uruchamia ją
- Czeka na uruchomienie maszyny wirtualnej i czeka, aż usługa WinRM będzie gotowa na przyjęcie połączeń zdalnych
- Oczekiwanie na zakończenie przez Windows konfiguracji początkowej i konfiguracji nowych łatek
- Stosuje wszelkie dalsze poprawki
- Uruchomi się ponownie, aby zakończyć konfigurację najnowszych łatek
- Czeka, aż system Windows zakończy konfigurowanie poprawek
- Pcha skrypt sysprep na maszynę i wywołuje ten skrypt. Spowoduje to uruchomienie sysprep, a następnie wyłączenie urządzenia
- Usuwa maszynę wirtualną, ale zachowuje VHDX
- Usuwa pliki sysprep i instalacji nienadzorowanej z VHDX, a następnie kompaktuje VHDX
- Przenosi VHDX do lokalizacji szablonu i oznacza jako tylko do odczytu
Występuje problem w krokach 6 i 9. Idealnie czekamy na zakończenie całej konfiguracji przed ponownym uruchomieniem / zamknięciem komputera, ale wydaje się, że nie ma sposobu na wykrycie, że system Windows zakończył etap konfiguracji.
Podczas przechodzenia przez interfejs użytkownika jest bardzo jasne, kiedy którykolwiek z kroków zostanie wykonany, ponieważ interfejs logowania nie pojawia się, dopóki proces nie jest gotowy. Jednak przy użyciu WinRM do zdalnego połączenia z maszyną jest to mniej jasne, ponieważ WinRM zapewnia dostęp do komputera, zanim zakończy się praca konfiguracyjna.
Pytanie brzmi zatem, jaki jest najgłupszy sposób na wykrycie przez zdalne połączenie, że system Windows zakończył konfigurowanie aktualizacji itp., Abyśmy mogli ponownie uruchomić / zamknąć komputer bez powodowania problemów w późniejszym czasie.
------ EDYTOWAĆ -----
W końcu jesteśmy stosując zmodyfikowaną wersję odpowiedzi Katherine, że nasz skrypt czeka także windeploy
i ngen
do końca. Biorąc pod uwagę, że ngen
nie kończy się to długo po zakończeniu inicjalizacji systemu operacyjnego, co działa, i jako bonus, ostateczny VHDX będzie miał całą strukturę .NET, co oznacza, że nie musimy sobie z tym poradzić, gdy tworzymy nowy Maszyny wirtualne dysku szablonu. Zarówno skrypt, którego używamy do tworzenia szablonu VHDX, jak i skrypty do tworzenia lokalnego środowiska testowego znajdują się na github na wypadek, gdyby ktoś był zainteresowany.
źródło
Każda poprawka aktualizacji systemu Windows zapisze kilka zdarzeń w dzienniku zdarzeń Instalatora.
Jednym ze sposobów na określenie wszystkich zastosowanych poprawek byłoby zapętlenie kontroli identyfikatora zdarzenia 4. Porównaj czas tego zdarzenia z bieżącym czasem. Jeśli żadne zdarzenie o identyfikatorze 4 nie zostało zapisane przez 5 lub 10 minut, wszystkie patache są prawdopodobnie gotowe i gotowe do ponownego uruchomienia.
Nie jestem pewien, czy chcesz zrobić pierwszy restart po zakończeniu instalacji łat (zdarzenie 4), czy drugi restart po zakończeniu konfigurowania (zdarzenie 2). Ten kod robi to pierwsze. Po prostu zmień filterHashTable na event id 2 dla drugiego restartu przed krokiem 10.
źródło
Odniosłem sukces, stosując następujące podejście: Poczekaj, aż system Windows zmieni typ uruchamiania usługi instalatora modułów systemu Windows (inaczej TrustedInstaller) na ręczny (uruchamianie na żądanie) - po ponownym uruchomieniu. W tym momencie aktualizacje zostały zakończone.
Proces zaufanego instalatora czasami nadal działa po zainstalowaniu łat? Jednak typ uruchomienia usługi jest nadal resetowany do ręcznego.
Możesz sam sprawdzić, czy powyższa obserwacja jest spójna / poprawna, przeglądając poprzednie komunikaty dziennika zdarzeń i korelując zdarzenia między dziennikiem systemu a dziennikami instalacji.
Zmiana uruchamiania Instalatora modułów systemu Windows jest rejestrowana jako zdarzenie systemowe 7040 i koreluje z ostatnim zdarzeniem 2 w dzienniku instalacji po ponownym uruchomieniu.
Myślę, że kiedy instalowane są aktualizacje, ta usługa jest ustawiona na „Auto Start” na wypadek, gdyby konieczne było ponowne uruchomienie. Po zainstalowaniu ostatniej poprawki jest ustawiany z powrotem na „Ręczny” (niezależnie od tego, czy wymagane było ponowne uruchomienie).
Na niektórych serwerach zauważyłem, że zaufane uruchomienie Instalatora szybko przełącza się z ręcznego na automatyczne i wstecz, i może się to zdarzać co godzinę. Podejrzewam, że jest to aplikacja, która regularnie sprawdza dostępność aktualizacji. Z mojego doświadczenia wynika jednak, że ogólnie można bezpiecznie założyć, że jeśli uruchamianie odbywa się ręcznie, wówczas nie następuje łatanie.
źródło