Kami berencana untuk mengotomatisasi pembuatan VM untuk infrastruktur pembangunan kami sehingga kami dapat:
- Skala sumber daya bangunan berdasarkan permintaan, misalnya dengan menambahkan lebih banyak agen pembangunan saat diperlukan dan menghapusnya saat tidak diperlukan
- Buat kembali semua atau sebagian lingkungan bangunan jika / saat mesin mati
- Gandakan lingkungan build saat kami membutuhkan tes
Salah satu langkah dalam proses ini adalah mengotomatiskan pembuatan gambar dasar VM (dalam kasus kami menggunakan Hyper-V). Untuk itu kami memiliki skrip yang:
- Membuat VHDX baru dari ISO dengan skrip Convert-WindowsImage . Kami saat ini menggunakan Windows 2012R2 tetapi akan segera memulai 2016 segera setelah tersedia.
- Menambahkan skrip tanpa pengawasan ke VHDX baru dengan semua konfigurasi dasar yang kita butuhkan
- Memperbarui VHDX dengan tambalan windows terbaru menggunakan skrip Apply-WindowsUpdate
- Menciptakan VM Hyper-V baru berdasarkan VHDX dan memulainya
- Tunggu VM untuk boot dan menunggu layanan WinRM siap menerima koneksi jarak jauh
- Tunggu windows untuk menyelesaikan konfigurasi awal dan konfigurasi patch baru
- Menerapkan tambalan lebih lanjut
- Reboot untuk menyelesaikan konfigurasi tambalan terbaru
- Menunggu windows untuk menyelesaikan konfigurasi tambalan
- Dorong skrip sysprep ke mesin dan aktifkan skrip itu. Ini menjalankan sysprep dan kemudian mematikan mesin
- Menghapus VM tetapi tetap menggunakan VHDX
- Menghapus sysprep dan unattend file dari VHDX dan kemudian memadatkan VHDX
- Memindahkan VHDX ke templat lokasi dan tandai sebagai hanya-baca
Masalah yang kita alami adalah pada langkah 6 dan 9. Idealnya kita menunggu semua konfigurasi selesai sebelum kita me-reboot / mematikan mesin, tetapi sepertinya tidak ada cara untuk mendeteksi bahwa windows telah menyelesaikan tahap konfigurasi.
Ketika melewati UI, sangat jelas kapan salah satu langkah dilakukan karena UI login tidak muncul sampai proses siap. Namun ketika menggunakan WinRM untuk terhubung dari jarak jauh ke mesin, ini kurang jelas karena WinRM menyediakan akses ke mesin sebelum dilakukan dengan pekerjaan konfigurasi.
Jadi pertanyaannya adalah apa cara bukti paling bodoh untuk mendeteksi melalui koneksi jarak jauh bahwa Windows telah selesai mengkonfigurasi pembaruan dll. Sehingga kita dapat reboot / mematikan mesin tanpa menyebabkan masalah di kemudian hari.
------ EDIT -----
Pada akhirnya kami menggunakan versi modifikasi dari jawaban Katherine di mana skrip kami juga menunggu windeploy
dan ngen
menyelesaikan. Mengingat itu ngen
tidak selesai sampai setelah OS selesai menginisialisasi yang berfungsi, dan sebagai bonus VHDX akhir akan memiliki semua .NET framework ngen-ed yang berarti kita tidak harus berurusan dengan itu ketika kita membuat yang baru VMS disk templat. Kedua skrip yang kami gunakan untuk membuat template VHDX dan skrip untuk membuat lingkungan pengujian lokal ada di github jika ada yang tertarik.