วิธีการตรวจสอบจากระยะไกล windows ได้เสร็จสิ้นการกำหนดค่าโปรแกรมแก้ไขหลังจากรีบูต


10

เราวางแผนที่จะสร้าง VM ให้เป็นอัตโนมัติสำหรับโครงสร้างพื้นฐานการสร้างของเราเพื่อให้เราสามารถ:

  1. ปรับขนาดรีซอร์สการบิลด์ตามความต้องการเช่นโดยการเพิ่มเอเจนต์บิลด์เพิ่มเติมเมื่อต้องการและลบออกเมื่อไม่ต้องการ
  2. สร้างสภาพแวดล้อมการสร้างใหม่ทั้งหมดหรือบางส่วนหาก / เมื่อเครื่องตาย
  3. ทำซ้ำสภาพแวดล้อมการสร้างเมื่อเราต้องการตั้งค่าการทดสอบ

หนึ่งในขั้นตอนในกระบวนการนี้คือสร้างภาพฐาน VM โดยอัตโนมัติ (ในกรณีของเราโดยใช้ Hyper-V) เพื่อที่เราจะได้สคริปต์ที่:

  1. สร้าง VHDX ใหม่จาก ISO ด้วยสคริปต์Convert-WindowsImage ขณะนี้เรากำลังใช้ Windows 2012R2 อยู่ แต่จะเริ่มต้นใช้งานกับ 2016 ทันทีที่พร้อมใช้งาน
  2. เพิ่มสคริปต์แบบอัตโนมัติไปยัง VHDX ใหม่พร้อมการกำหนดค่าพื้นฐานทั้งหมดที่เราต้องการ
  3. อัพเดต VHDX ด้วย windows patches ล่าสุดโดยใช้สคริปต์Apply-WindowsUpdate
  4. สร้าง Hyper-V VM ใหม่ตาม VHDX และเริ่มต้น
  5. รอให้ VM บูตและรอบริการ WinRM เพื่อให้พร้อมรับการเชื่อมต่อระยะไกล
  6. รอให้ windows ทำการกำหนดค่าเริ่มต้นและกำหนดค่าแพตช์ใหม่ให้เสร็จ
  7. ใช้แพตช์เพิ่มเติม
  8. เริ่มต้นใหม่เพื่อให้การกำหนดค่าของแพตช์ล่าสุดเสร็จสมบูรณ์
  9. รอให้ windows ทำการกำหนดค่าแพตช์ให้เสร็จ
  10. พุชสคริปต์ sysprep ไปยังเครื่องและเรียกใช้สคริปต์นั้น สิ่งนี้จะเรียกใช้ sysprep จากนั้นปิดเครื่อง
  11. ลบ VM แต่เก็บ VHDX
  12. ลบ sysprep และไม่ต้องใส่ไฟล์ออกจาก VHDX จากนั้นทำการบีบอัด VHDX
  13. ย้าย VHDX ไปยังตำแหน่งเทมเพลตและทำเครื่องหมายว่าอ่านอย่างเดียว

ปัญหาที่เราประสบอยู่ในขั้นตอนที่ 6 และ 9 โดยปกติแล้วเรารอให้การกำหนดค่าทั้งหมดเสร็จสิ้นก่อนที่เราจะรีบูต / ปิดเครื่อง แต่ดูเหมือนจะไม่มีวิธีการตรวจสอบว่า windows ได้เสร็จสิ้นขั้นตอนการกำหนดค่าแล้ว

เมื่อผ่าน UI จะมีความชัดเจนมากเมื่อทำขั้นตอนใดขั้นตอนหนึ่งเนื่องจากการเข้าสู่ระบบ UI ไม่ปรากฏขึ้นจนกว่ากระบวนการจะพร้อม อย่างไรก็ตามเมื่อใช้ WinRM เพื่อเชื่อมต่อกับเครื่องจากระยะไกลสิ่งนี้จะมีความชัดเจนน้อยกว่าเนื่องจาก WinRM ให้การเข้าถึงเครื่องก่อนที่จะเสร็จสิ้นด้วยการกำหนดค่า

ดังนั้นคำถามก็คือวิธีที่พิสูจน์ได้ว่าโง่ที่สุดในการตรวจสอบการเชื่อมต่อระยะไกลที่ Windows ได้ทำการตั้งค่าการอัพเดท ฯลฯ เพื่อให้เราสามารถรีบูต / ปิดเครื่องโดยไม่ทำให้เกิดปัญหาในภายหลัง

------ แก้ไข -----

ในที่สุดเราก็ใช้คำตอบของ Katherine เวอร์ชันที่แก้ไขแล้วซึ่งสคริปต์ของเราก็รอwindeployและngenดำเนินการให้เสร็จสมบูรณ์ ระบุว่าngenยังไม่สมบูรณ์จนกว่าจะดีหลังจากที่ระบบปฏิบัติการเสร็จสิ้นการเริ่มต้นใช้งานและเป็นโบนัส VHDX สุดท้ายจะมี. NET Framework ngen-ed ทั้งหมดซึ่งหมายความว่าเราไม่ต้องจัดการกับสิ่งนั้นเมื่อเราสร้างใหม่ VMs ของเทมเพลตดิสก์ สคริปต์ทั้งสองที่เราใช้ในการสร้างเทมเพลต VHDXและสคริปต์เพื่อสร้างสภาพแวดล้อมการทดสอบในท้องถิ่นนั้นอยู่ใน GitHub ในกรณีที่ทุกคนสนใจ

คำตอบ:


6

นี่อาจฟังดูเหมือนคำตอบแปลก ๆ แต่ ...

มีสคริปต์ PowerShell สำหรับตรวจสอบเพื่อดูว่ามีการอัพเดตสำหรับ Nagiosหรือไม่ คุณอาจใช้สคริปต์นี้หรือชุดตัวเลือกเพื่อจุดประสงค์ของคุณโดยไม่ต้องใช้ Nagios

ตรวจสอบว่า Wuauclt และ TrustedInstaller กำลังทำงานอยู่หรือไม่ คำแนะนำของ Microsoft เกี่ยวกับการอัปเดตบน Server Core อาจช่วยได้ที่นี่ :

คุณอาจต้องรีสตาร์ทคอมพิวเตอร์แม้ว่าระบบจะไม่แจ้งให้คุณทราบทั้งนี้ขึ้นอยู่กับการอัพเดตที่ติดตั้ง ในการพิจารณาว่ากระบวนการติดตั้งเสร็จสมบูรณ์หรือไม่ให้ใช้ตัวจัดการงานเพื่อตรวจสอบว่ากระบวนการ Wuauclt หรือ Trusted Installer ไม่ได้ทำงานอยู่ คุณยังสามารถใช้วิธีการในส่วน“ ดูการปรับปรุงที่ติดตั้งไว้” เพื่อตรวจสอบรายการการปรับปรุงที่ติดตั้ง

Get-Process -Computername YourImage TrustedInstaller.exeคุณอาจจะสามารถดึงข้อมูลนั้นกับสิ่งที่ต้องการ หลังจากกระบวนการ Wuauclt และ TrustedInstaller เสร็จสิ้นแล้วควรเริ่มต้นใหม่ได้อย่างปลอดภัย


สคริปต์นั้นแก้ปัญหาในการรับการปรับปรุงและตรวจสอบว่าจำเป็นต้องรีบูตซึ่งเป็นปัญหาอื่นที่เราอาจต้องแก้ไข แต่สคริปต์ไม่จัดการกับการรอให้รีบูตเสร็จสมบูรณ์จนถึงจุดที่เครื่องพร้อมทำงาน .
Petrik

คุณแสดงความคิดเห็นในขณะที่ฉันกำลังแก้ไข ฉันได้เพิ่มข้อมูลบางอย่างเกี่ยวกับการตรวจจับสถานะนั้นใน Server Core ซึ่งใกล้เคียงกับการทำเช่นนั้นจากระยะไกล
Katherine Villyard

1
ฉันมีความคิดเห็นมากเกินไปมีความสุข ฉันจะดูการค้นหา Wuauclt หรือ TrustedInstaller
Petrik

ฉันเป็น "hit post" เพียงเล็กน้อยมีความสุขกับตัวเอง :)
Katherine Villyard

1
วิธีการนี้ใช้ได้ผลสำหรับฉันยกเว้นว่า TrustedInstaller และ Wuauclt จะยุติก่อนที่จะเริ่มต้น หลังจากเพิ่ม windeploy และ ngen สคริปต์จะรอให้เครื่องทำการเริ่มต้นทั้งหมดให้เสร็จสมบูรณ์ (อาจเป็นเพราะ ngen ยังไม่เสร็จสมบูรณ์จนกว่าเครื่องจะเสร็จสิ้นการเริ่มต้น)
Petrik

3

แต่ละโปรแกรมปรับปรุงของ Windows จะเขียนเหตุการณ์ต่าง ๆ ในบันทึกเหตุการณ์การตั้งค่า

  • รหัสเหตุการณ์ 1 - การเริ่มต้นการเปลี่ยนแปลงสำหรับแพ็คเกจ KB ####
  • รหัสเหตุการณ์ 4 - จำเป็นต้องรีบูตก่อนแพ็คเกจ KB #### สามารถเปลี่ยนเป็นสถานะที่ติดตั้งได้
  • รหัสเหตุการณ์ 2 - แพคเกจ KB #### ถูกเปลี่ยนเป็นสถานะที่ติดตั้งสำเร็จแล้ว

วิธีหนึ่งในการพิจารณาว่าแพตช์ทั้งหมดถูกนำไปใช้คือการวนรอบการตรวจสอบบน ID เหตุการณ์ 4 เปรียบเทียบเวลาของเหตุการณ์นั้นกับเวลาปัจจุบัน หากไม่มีการเขียนรหัสเหตุการณ์ 4 เป็นเวลา 5 หรือ 10 นาทีอาจมีการดำเนินการ pataches ทั้งหมดและพร้อมที่จะรีบูต

ฉันไม่ชัดเจนถ้าคุณต้องการทำการรีบูตครั้งแรกเมื่อการติดตั้งแพตช์เสร็จสิ้น (event4) หรือการรีบูตครั้งที่สองหลังจากการกำหนดค่าเสร็จสิ้น (เหตุการณ์ 2) รหัสนี้ทำในอดีต เพียงเปลี่ยน filterHashTable เป็น event id 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
    }
}

การเขียนรหัสประจำตัว KB ของแพ็คเกจทั้งหมดที่เริ่มการติดตั้งจะใช้งานได้หรือไม่และจะเสร็จสิ้นก็ต่อเมื่อไม่มีการอัพเดทเพิ่มเติมใด ๆ ในเที่ยวบิน
Simon Richter

รายการของโปรแกรมแก้ไขจะมีการเปลี่ยนแปลงในแต่ละเดือนในวันอังคาร การอัปเดตกระบวนการในแต่ละเดือนเพื่อใช้รายการใหม่จะเป็นจุดบำรุงรักษาต่อเนื่อง ... ฉันคิดว่าสิ่งที่ฉันแนะนำจะง่ายกว่านี้
Clayton

1
ฉันหมายถึงส่วนขยายของคำตอบของคุณ: เมื่อการปรับปรุงเริ่มติดตั้ง (เหตุการณ์ 1) มันจะถูกเพิ่มลงในรายการและลบออกเมื่อรายงานเสร็จสิ้น (เหตุการณ์ 4) ด้วยการปรับแต่งบางอย่าง (การอัปเดตที่ล้มเหลวให้ทำการรีเซ็ตรายการระหว่างการรีบู๊ตหรือไม่) จึงเป็นไปได้ที่จะตรวจสอบว่ายังมีการติดตั้งต่อไปหรือไม่
Simon Richter

ดังนั้นสำหรับการติดตั้งใหม่จึงไม่มีรายการในบันทึกเหตุการณ์ที่น่าเสียดาย ฉันยังไม่ได้ลองติดตั้งหลังจากที่เครื่องเริ่มทำงานแล้ว แต่ฉันคิดว่าวิธีการนี้จะใช้ได้ดีในกรณีนั้น
Petrik

ติดตั้งใหม่หรือไม่ สับสน. คุณมีกระบวนการ 13 ขั้นตอนที่นี่ คุณขอความช่วยเหลือด้วยขั้นตอนที่ 6 และ 9 คำถามของคุณคือ "วิธีการตรวจสอบว่า windows ได้เสร็จสิ้นขั้นตอนการกำหนดค่า" ไม่ใช่วิธีเริ่มต้นการปรับใช้โปรแกรมแก้ไข
Clayton

0

ฉันประสบความสำเร็จด้วยวิธีการดังต่อไปนี้: รอจนกว่า Windows จะเปลี่ยนประเภทการเริ่มต้นของ Windows Module Installer Service (aka TrustedInstaller) เป็น Manual (Demand Start) - หลังจากรีบูตเครื่อง ณ จุดนั้นการอัปเดตเสร็จสิ้นการติดตั้ง

กระบวนการติดตั้งที่เชื่อถือได้บางครั้งยังคงทำงานหลังจากติดตั้งแพตช์? อย่างไรก็ตามประเภทการเริ่มบริการยังคงรีเซ็ตเป็น Manual

คุณสามารถตรวจสอบด้วยตัวคุณเองถ้าการสังเกตข้างต้นนั้นสอดคล้อง / ถูกต้องโดยดูที่ข้อความบันทึกเหตุการณ์ก่อนหน้านี้และเชื่อมโยงเหตุการณ์ระหว่างบันทึกระบบและการตั้งค่า

การเปลี่ยนแปลงเริ่มต้นเป็น Windows Module Installer ถูกบันทึกเป็นเหตุการณ์ของระบบ 7040 และสัมพันธ์กับเหตุการณ์ที่ 2 ล่าสุดในบันทึกการตั้งค่าหลังจากรีบูต

ฉันคิดว่าเมื่อมีการติดตั้งการปรับปรุงครั้งแรกบริการนี้ถูกตั้งค่าเป็น 'เริ่มอัตโนมัติ' ในกรณีที่จำเป็นต้องรีบูต มันถูกตั้งค่ากลับเป็น 'คู่มือ' เมื่อติดตั้งแพตช์ล่าสุด (ไม่ว่าจะต้องรีบู๊ตหรือไม่ก็ตาม)

ในบางเซิร์ฟเวอร์ฉันสังเกตเห็นว่าการเริ่มต้นตัวติดตั้งที่เชื่อถือได้จะถูกสลับอย่างรวดเร็วจาก Manual เป็น Automatic และ back และสิ่งนี้อาจเกิดขึ้นทุกชั่วโมงหรือมากกว่านั้น ฉันสงสัยว่าเป็นแอปพลิเคชั่นบางตัวที่ตรวจสอบการอัปเดตเป็นประจำ แต่ประสบการณ์ของฉันคือโดยทั่วไปถือว่าปลอดภัยถ้าเริ่มต้นด้วยตนเองแล้วไม่มีการปะแก้เกิดขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.