โครงการนี้เป็นเครื่องมือจัดการแพทช์น้ำหนักเบาสำหรับระบบปฏิบัติการที่ใช้ Windows ช่วยในการตรวจสอบและควบคุมการจัดการแพตช์ของระบบปฏิบัติการ เดิมทีเขียนเพื่อช่วยในการจัดการแพตช์สำหรับโซลูชันที่ใช้เดสก์ท็อปเสมือนจริงของ Windows (WVD) แต่ใช้งานได้ดีสำหรับโซลูชันหรือการตั้งค่าที่ไม่ใช่ WVD อื่น ๆ (เช่นการจัดการแพตช์สำหรับคอมพิวเตอร์ครอบครัว)
สำหรับการจัดการแพตช์สำหรับเวิร์กโหลดที่ใช้ Windows คุณมีตัวเลือกระดับองค์กรมากมาย ตัวอย่างเช่น System Center Configuration Manager, Windows Update for Business, Windows Update ในกรณีที่การจัดการแพตช์ WVD ยังฉีดเข้าไปในอิมเมจ WVD พื้นฐาน
แต่บางครั้งคุณอาจไม่มีการตั้งค่าซึ่งช่วยให้คุณใช้เครื่องมือที่เน้นด้านบน บางทีคุณอาจมีโดเมนโฆษณาและป่ามากมายบางทีคุณอาจจะขาดความสามารถบางอย่างเช่นการรายงานแดชบอร์ด, telemetry เพื่อชื่อไม่กี่
นี่คือเมื่อคุณอาจได้รับประโยชน์จากโครงการนี้ซึ่งพยายามตอบสนองความต้องการดังกล่าว
โดยทั่วไปคำแนะนำของเรามักจะมองหาโซลูชั่นระดับมืออาชีพที่อธิบายไว้ข้างต้นและเฉพาะในกรณีที่คุณเห็นช่องว่างบางอย่างด้วยโซลูชั่นระดับมืออาชีพที่คุณอาจต้องการตรวจสอบโครงการโอเพนซอร์สนี้


ข้อมูล Telemetry รองรับข้อมูลที่มาจากแพลตฟอร์ม Azure (หาก VM ทำงานภายในแพลตฟอร์ม Azure) ข้อมูลเกี่ยวกับ Metadata VM เช่นชื่อ Azure VM (VMRESOURCENAME) ชื่อกลุ่มทรัพยากร (ResourceGroupName) และ ID การสมัครสมาชิก (SUBSCRIPTIONID) ข้อมูลโดยทั่วไปที่กำหนด Azure VM ของคุณ
สิ่งนี้ช่วยให้สามารถรองรับความสามารถในการกรองที่สมบูรณ์ยิ่งขึ้นและระบุ Azure VMS และที่กำหนด VM ดังกล่าว ในกรณีที่สภาพแวดล้อมโฮสติ้งนี้ไม่ได้ทำงานภายในแพลตฟอร์ม Azure ข้อมูลดังกล่าวไม่สามารถใช้ได้ในส่วนหัว telemetry
Application Insights บริการและ Log Analytics Workspace คุณยังสามารถสร้างบัญชี Azure ฟรีได้หากจำเป็น: https://azure.microsoft.com/en-us/free WVDCUS.zip - มีไฟล์ไบนารีซึ่งจำเป็นต้องปรับใช้กับโฮสต์ที่ตรวจสอบSource code.zip - ซอร์สโค้ดของโครงการนี้Source code.tar.gz - ซอร์สโค้ดของโครงการนี้ในรูปแบบ tar/zip ที่แตกต่างกันWVDCUS.zip ใน Properties การคลิกขวาของไดเรกทอรีคลิกขวาบนไฟล์และทำเครื่องหมายช่องทำเครื่องหมาย Unblock คลิก OKWVDCUS.zip บนโฮสต์ที่ตรวจสอบทั้งหมดลงในไดเรกทอรี WVDCUS ตัวอย่างเช่นไดเรกทอรี: C:Program FilesWVDCUS Log Analytics Workspace ในภูมิภาคที่ต้องการด้วยชื่อที่ไม่ซ้ำกันและแผนการจ่ายเงินตามแผน: https://docs.microsoft.com/en-us/azure/azure-monitor/learn/quick-create-workspace#create-a-workspacepaceApplication Insights ทรัพยากรที่ใช้พื้นที่ทำงานในภูมิภาคเดียวกันกับทรัพยากรก่อนหน้าด้วยชื่อที่ไม่ซ้ำกันพร้อมตัวเลือกที่ใช้พื้นที่ทำงานและเลือกพื้นที่ทำงานที่คุณสร้างมาก่อน https://docs.microsoft.com/en-us/azure/azure-monitor/app/create-workspace-resource#create-workspace-based-resourceApplication Insights ที่สร้างขึ้นเพียงแค่การ Overview และการคัดลอก Instrumentation Key นามแฝง Telemetry Key ซึ่งจะใช้ในภายหลังในระหว่างการกำหนดค่า C:Program FilesWVDCUSWVDCUS.Service.exe.config ใน notepad (หรือตัวแก้ไขข้อความอื่น ๆ )TelemetryKey และแทนที่เนื้อหา 00000000-0000-0000-0000-000000000000 ด้วยค่าที่คุณได้รับจากทรัพยากร Application Insights จากรายการ Instrumentation KeyCheckForUpdatesIntervalHours เป็นค่าที่เหมาะสมกว่า ค่านี้ระบุว่าควรตรวจสอบการอัปเดตใหม่บ่อยครั้ง ค่าเริ่มต้นคือ 4 ชั่วโมงและค่าที่ถูกต้องอาจอยู่ระหว่าง 1 - 590 ชั่วโมงUpdatesSearchQuery เป็นค่าที่เหมาะสมกว่า ค่านี้ระบุประเภทและหมวดหมู่ของแพตช์ควรติดตั้งโดยอัตโนมัติ คำอธิบายของคิวรีและพารามิเตอร์อยู่ที่นี่: https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ff357803(v=vs.85) และที่นี่: https://docs.microsoft.com/en-us/windows/win32/api/wuapi/nf-wuapi-iupdatesearcher-searchWVDCUS.Console.exe.config
WVDCUS.Console.exe ตอนนี้เพื่อดูว่าแอปพลิเคชันได้รับการกำหนดค่าอย่างถูกต้องหรือไม่ ดูข้อผิดพลาดใด ๆ ในเอาต์พุตแอปพลิเคชัน หากคุณเห็นข้อผิดพลาดบางอย่างตรวจสอบว่าคุณมีสิทธิ์เพียงพอ แอปพลิเคชันอาจตรวจสอบดาวน์โหลดและติดตั้งแพตช์หากมี
เมื่อคุณตรวจสอบการกำหนดค่าด้วยแอปพลิเคชันคอนโซลคุณสามารถจบการกำหนดค่าด้วยการลงทะเบียนแอปพลิเคชันเพื่อเรียกใช้เป็นบริการ Windows ในการลงทะเบียนแอปพลิเคชันเพื่อเรียกใช้เป็นบริการ Windows คุณต้องมีข้อมูลรับรองผู้ดูแลระบบในคอมพิวเตอร์ที่ติดตั้ง คุณต้องใช้เครื่องมือ installutil.exe ซึ่งเป็นส่วนหนึ่งของ. NET Runtime เครื่องมือนี้ติดตั้งด้วย. NET Framework ไปยังโฟลเดอร์ %windir%Microsoft.NETFramework[64]<framework version> ตัวอย่างเช่นเส้นทางเริ่มต้นสำหรับรุ่น 64 บิตคือ %windir%Microsoft.NETFramework64v4.0.30319InstallUtil.exe
Run as Administratorcd C:Program FilesWVDCUSC:WindowsMicrosoft.NETFramework64v4.0.30319InstallUtil.exe WVDCUS.Service.exeinstallutil.exe ล้มเหลวให้ตรวจสอบบันทึกการติดตั้งเพื่อค้นหาสาเหตุ โดยค่าเริ่มต้นบันทึกอยู่ในโฟลเดอร์เดียวกับบริการที่เรียกใช้งานได้WVDCUS.Console.exe ก่อน - จากนั้น installutil.exe จะล้มเหลว ข้อผิดพลาดคือบันทึกเหตุการณ์ที่ลงทะเบียนแล้วโดยแอปพลิเคชันคอนโซล หากล้มเหลวเพียงถอนการติดตั้งบริการ Windows ด้วยคำสั่ง Bellow (ลบบันทึกเหตุการณ์) และติดตั้งบริการ Windows อีกครั้งC:WindowsMicrosoft.NETFramework64v4.0.30319InstallUtil.exe /u WVDCUS.Service.exeC:WindowsMicrosoft.NETFramework64v4.0.30319InstallUtil.exe WVDCUS.Service.exe 
services.msc ที่คุณสามารถค้นหาบริการ Windows ที่ลงทะเบียนได้ภายใต้ WVDCUS Service ชื่อของบริการเองคือ WVDCUSWVDCUS Service บนแท็บการกู้คืนระบุสำหรับความล้มเหลวครั้งแรกและครั้งที่สอง Restart the ServiceApplyStart
คุณสามารถดูข้อมูลโดยละเอียดเกี่ยวกับสุขภาพของบริการความล้มเหลวข้อความที่ให้ข้อมูลในบันทึกเหตุการณ์
eventvwr.msc ซึ่งคุณสามารถค้นหาข้อมูลรายละเอียดในไฟล์บันทึกWVDCUSLog
เมื่อบริการ Windows ขึ้นอยู่และในสถานะการรันมันจะเริ่มสร้างข้อมูล telemetry และจัดเก็บไว้ในทรัพยากร Application Insights ที่ได้รับการจัดเตรียมผ่านตัวระบุ TelemetryKey เนื่องจากทรัพยากร Application Insights เชื่อมต่อกับ Log Analytics Workspace ในระหว่างกระบวนการจัดเตรียมคุณอาจได้รับประโยชน์จากคุณสมบัติทั้งหมดที่มีอยู่ในทรัพยากร Log Analytics Workspace สำหรับรายละเอียดเพิ่มเติมโปรดดู: https://docs.microsoft.com/en-us/azure/azure-monitor/log-query/log-upery-overview
ข้อมูล Telemetry ถูกเก็บไว้เป็นเหตุการณ์ที่กำหนดเองและคุณอาจพบได้ในตาราง customEvents สิ่งนี้ช่วยให้คุณสามารถดูและวิเคราะห์ข้อมูลจากโฮสต์ทั้งหมดและดูสถานะปัจจุบันสุขภาพและข้อความข้อมูลเกี่ยวกับการจัดการแพตช์จากหลายมุมมองและช่วงเวลาที่ระบุ สำหรับรายละเอียดเพิ่มเติมโปรดดู: https://docs.microsoft.com/en-us/azure/azure-monitor/log-query/get-started-queries

การวิเคราะห์ข้อมูลผ่านการสืบค้นและหลายมุมมองเป็นคุณสมบัติที่ทรงพลังมาก อย่างไรก็ตามสำหรับการตรวจสอบรายวันคุณมักจะต้องเห็นสถานะโดยรวมของโฮสต์ผ่านรายงานบางประเภทอย่างรวดเร็ว โชคดีที่ Log Analytics Workspace Resource มีความสามารถเช่นกัน
คุณสามารถสร้างสมุดงานที่กำหนดเองด้วยการสืบค้นที่กำหนดเองผ่านข้อมูล telemetry และแสดงผลผ่านการแสดงภาพที่เกี่ยวข้อง
สำหรับรายละเอียดเพิ่มเติมโปรดดู: https://docs.microsoft.com/en-us/azure/azure-monitor/platform/workbooks-overview
Application Insights Workbooks ส่วนต่างๆCheckForUpdatesIntervalHours เมื่อช่วงเวลาลดลงคุณอาจไม่เห็นข้อมูลใด ๆRun Query เพื่อแสดงแผนภูมิจากข้อมูลล่าสุดDone EditingSave และบันทึกสมุดงานภายใต้ชื่อที่ต้องการ ครั้งต่อไปที่คุณสามารถเข้าสู่ส่วน Workbooks โดยตรงและคลิกที่เพิ่งสร้างเวิร์กบุ๊กเพื่อดูรายงานด้วยข้อมูลล่าสุด
let WVDCUS = customEvents
| where itemType == 'customEvent' and operation_Name == 'WVDCUS.Event';
let WVDCUS_TelemetryStart = WVDCUS
| where name == 'TelemetryStart'
| project MachineName = tostring(customDimensions.MachineName), operation_Id, timestamp, VMResourceName = tostring(customDimensions.VMResourceName), ResourceGroupName = tostring(customDimensions.ResourceGroupName), SubscriptionId = tostring(customDimensions.SubscriptionId)
| summarize arg_max(timestamp, *) by MachineName;
let WVDCUS_Result = WVDCUS_TelemetryStart
| join kind = innerunique customEvents on operation_Id
| where name in ('NoUpdatesAvailable', 'UpdatesInstalledNoUpdates', 'UpdatesNotInstalledFailed', 'UpdatesInstalledRebootRequired', 'UpdatesInstalledAllOK', 'Error')
| extend State=replace(@'NoUpdatesAvailable', @'Up to date', name)
| extend State=replace(@'UpdatesInstalledNoUpdates', @'Up to date', State)
| extend State=replace(@'UpdatesNotInstalledFailed', @'Failed', State)
| extend State=replace(@'UpdatesInstalledRebootRequired', @'Reboot Required', State)
| extend State=replace(@'UpdatesInstalledAllOK', @'Up to date', State)
| extend State=replace(@'Error', @'Error', State)
| project MachineName, Timestamp = timestamp1, State, VMResourceName, ResourceGroupName, SubscriptionId;
WVDCUS_Result
| project MachineName, State, VMResourceName, ResourceGroupName, SubscriptionId
| summarize Count=count() by State
| render piechart;
คุณอาจต้องการดูรายงานที่แสดงสถานะปัจจุบันของแต่ละโฮสต์ คุณสามารถขยายเวิร์กบุ๊กที่สร้างขึ้นด้วยชิ้นส่วนรายงานใหม่
EditAdd คลิกและเลือก Add QueryCheckForUpdatesIntervalHours เมื่อช่วงเวลาลดลงคุณอาจไม่เห็นข้อมูลใด ๆRun Query เพื่อดูผลลัพธ์จากข้อมูลล่าสุดDone EditingSave let WVDCUS = customEvents
| where itemType == 'customEvent' and operation_Name == 'WVDCUS.Event';
let WVDCUS_TelemetryStart = WVDCUS
| where name == 'TelemetryStart'
| project MachineName = tostring(customDimensions.MachineName), operation_Id, timestamp, VMResourceName = tostring(customDimensions.VMResourceName), ResourceGroupName = tostring(customDimensions.ResourceGroupName), SubscriptionId = tostring(customDimensions.SubscriptionId)
| summarize arg_max(timestamp, *) by MachineName;
let WVDCUS_Result = WVDCUS_TelemetryStart
| join kind = innerunique customEvents on operation_Id
| where name in ('NoUpdatesAvailable', 'UpdatesInstalledNoUpdates', 'UpdatesNotInstalledFailed', 'UpdatesInstalledRebootRequired', 'UpdatesInstalledAllOK', 'Error')
| extend State=replace(@'NoUpdatesAvailable', @'Up to date', name)
| extend State=replace(@'UpdatesInstalledNoUpdates', @'Up to date', State)
| extend State=replace(@'UpdatesNotInstalledFailed', @'Failed', State)
| extend State=replace(@'UpdatesInstalledRebootRequired', @'Reboot Required', State)
| extend State=replace(@'UpdatesInstalledAllOK', @'Up to date', State)
| extend State=replace(@'Error', @'Error', State)
| project MachineName, Timestamp = timestamp1, State, VMResourceName, ResourceGroupName, SubscriptionId;
WVDCUS_Result
| project MachineName, Timestamp, State, VMResourceName, ResourceGroupName, SubscriptionId
คุณสามารถดูรายงานตัวอย่างรวม - มีสองส่วนในรูปภาพด้านล่าง

ในที่สุดคุณอาจไม่มีความสนใจในการตรวจสอบรายงานทุกวัน บางทีคุณอาจต้องการทำมันเฉพาะในกรณีที่จำเป็นจริงๆ ในกรณีนี้คุณอาจได้รับประโยชน์จากการแจ้งกลไกซึ่งจะแจ้งให้คุณทราบว่าโฮสต์บางคนต้องการความสนใจของคุณ
อีกครั้ง Log Analytics Workspace มีความสามารถในตัว สำหรับรายละเอียดเพิ่มเติมโปรดดู: https://docs.microsoft.com/en-us/azure/azure-monitor/learn/tutorial-response
นี่คือวิธีที่คุณสามารถสร้างการแจ้งเตือนตามชุดของเงื่อนไข
Application Insights Logs ส่วนปิดหน้าต่างด้วยแบบสอบถามตัวอย่างcustomEventsSee in query editorNew alert rule ในแถบเครื่องมือScope ตามที่เป็น - ควรชี้ไปที่อินสแตนซ์ Application Insights ที่ถูกต้องCondition ให้ระบุค่าช่วงเวลา - ค่านี้จะต้องจัดตำแหน่งกับการตั้งค่า CheckForUpdatesIntervalHours เมื่อช่วงเวลาลดลงคุณอาจไม่เห็นข้อมูลใด ๆSearch queryNumber of results Greater than และค่าเกณฑ์ 0 - โดยทั่วไปการแจ้งเตือนจะถูกเรียกใช้หากบันทึกใหม่บางอย่างซึ่งอยู่ในสถานะ Failed Error Reboot RequiredAction Group ที่มีอยู่ คลิกปุ่ม Select action group หากจำเป็นให้คลิกเพื่อ Create action group ดู https://docs.microsoft.com/en-us/azure/azure-monitor/platform/action-groups?wt.mc_id=portal-microsoft_azure_monitoringCreate alert rule let WVDCUS = customEvents
| where itemType == 'customEvent' and operation_Name == 'WVDCUS.Event';
let WVDCUS_TelemetryStart = WVDCUS
| where name == 'TelemetryStart'
| project MachineName = tostring(customDimensions.MachineName), operation_Id, timestamp, VMResourceName = tostring(customDimensions.VMResourceName), ResourceGroupName = tostring(customDimensions.ResourceGroupName), SubscriptionId = tostring(customDimensions.SubscriptionId)
| summarize arg_max(timestamp, *) by MachineName;
let WVDCUS_Result = WVDCUS_TelemetryStart
| join kind = innerunique customEvents on operation_Id
| where name in ('NoUpdatesAvailable', 'UpdatesInstalledNoUpdates', 'UpdatesNotInstalledFailed', 'UpdatesInstalledRebootRequired', 'UpdatesInstalledAllOK', 'Error')
| extend State=replace(@'NoUpdatesAvailable', @'Up to date', name)
| extend State=replace(@'UpdatesInstalledNoUpdates', @'Up to date', State)
| extend State=replace(@'UpdatesNotInstalledFailed', @'Failed', State)
| extend State=replace(@'UpdatesInstalledRebootRequired', @'Reboot Required', State)
| extend State=replace(@'UpdatesInstalledAllOK', @'Up to date', State)
| extend State=replace(@'Error', @'Error', State)
| project MachineName, Timestamp = timestamp1, State, VMResourceName, ResourceGroupName, SubscriptionId;
WVDCUS_Result
| where State in ('Failed','Reboot Required', 'Error')
| project MachineName, Timestamp, State, VMResourceName, ResourceGroupName, SubscriptionId
สิ่งนี้ควรกระตุ้นการกระทำและความสนใจเมื่อโฮสต์บางตัวจะตกอยู่ในรัฐใดรัฐหนึ่ง Failed Reboot Required Error
แจ้งเตือนอีเมลที่คุณสามารถรับเพื่อดึงดูดความสนใจของคุณ
