هذا المشروع هو أداة إدارة تصحيح الوزن الخفيفة لنظام التشغيل Windows. يساعد على مراقبة والتحكم في إدارة التصحيح من نظام التشغيل. مكتوبة في الأصل للمساعدة في Management Patch for Windows Virtual Desktop (WVD) ، ولكنها تعمل أيضًا بشكل جيد للغاية للحلول الأخرى غير المستندة إلى WVD أو الإعدادات. (على سبيل المثال إدارة التصحيح لأجهزة الكمبيوتر العائلية)
بالنسبة لإدارة التصحيح لأعباء العمل المستندة إلى Windows ، عادة ما يكون لديك العديد من خيارات مستوى المؤسسة. على سبيل المثال ، مدير تكوين مركز النظام ، تحديث Windows for Business ، Windows Update ، في حالة إدارة WVD Patch أيضًا الحقن في صورة WVD الأساسية.
ولكن في بعض الأحيان ، ربما لا يكون لديك إعداد يتيح لك استخدام الأدوات المميزة أعلاه. ربما يكون لديك العديد من مجالات الإعلانات والغابات ، ربما قد تفتقد بعض القدرات مثل الإبلاغ ولوحات المعلومات والقياس عن بعد على تسمية قليلة.
هذا هو الوقت الذي قد تستفيد فيه من هذا المشروع الذي يحاول تلبية مثل هذه الاحتياجات.
بشكل عام ، تتمثل توصيتنا دائمًا في البحث أولاً عن الحلول المهنية الموضحة أعلاه وفقط إذا رأيت بعض الثغرات مع تلك الحلول المهنية التي قد ترغب في التحقق من هذا المشروع مفتوح المصدر.


تدعم بيانات القياس عن بعد الآن المعلومات القادمة من منصة Azure (إذا كان VM يعمل داخل منصة Azure). معلومات حول بيانات تعريف VM مثل Azure VM Name (VMResourCename) ، اسم مجموعة الموارد (ResourceGroupName) ومعرف الاشتراك (الاشتراك). في الأساس معلومات حيث يتم تعريف Azure VM الخاص بك.
يسمح ذلك بدعم قدرات التصفية الأكثر ثراءً وتحديد VMs Azure وحيث يتم تعريف مثل هذه VMs. في الحالات التي لا تعمل فيها بيئة الاستضافة هذه داخل منصة Azure ، لا تتوفر هذه المعلومات في رأس القياس عن بعد.
Application Insights الخدمة Log Analytics Workspace . يمكنك أيضًا إنشاء حساب Azure مجاني إذا لزم الأمر: https://azure.microsoft.com/en-us/free WVDCUS.zip - يحتوي على ملفات ثنائية يجب نشرها على المضيفين المراقبةSource code.zip - رمز المصدر لهذا المشروعSource code.tar.gzWVDCUS.zip . في دليل التنزيلات ، انقر بزر الماوس الأيمن على Properties على الملف ووضع علامة على مربع Unblock . انقر فوق OK .WVDCUS.zip على جميع المضيفين المراقبة في دليل WVDCUS . على سبيل المثال في الدليل: C:Program FilesWVDCUS Log Analytics Workspace الموارد في المنطقة المفضلة ، مع اسم فريد و Pay-you-go الخطة: https://docs.microsoft.com/en-us/azure/azure-monitor/learn/quick-create-workspace#create-aworkspaceApplication Insights الموارد المستندة إلى مساحة العمل في نفس المنطقة مثل المورد السابق ، مع اسم فريد ، مع خيار قائم على مساحة العمل وحدد مساحة العمل التي أنشأتها من قبل. https://docs.microsoft.com/en-us/azure/azure-monitor/app/create-workspace-resource#create-workspace- resourceApplication Insights الذي تم إنشاؤه للتو ، انقر فوق Overview على Telemetry Key Instrumentation Key عن بعد للأجهزة ونسخه والذي سيتم استخدامه لاحقًا أثناء التكوين. C:Program FilesWVDCUSWVDCUS.Service.exe.config في المفكرة (أو أي محرر نصوص آخر)TelemetryKey واستبدل المحتوى 00000000-0000-0000-0000-000000000000 بالقيمة التي حصلت عليها من مورد Application Insights من عنصر Instrumentation Key .CheckForUpdatesIntervalHours إلى قيمة أكثر ملاءمة. تحدد هذه القيمة مدى تواتر التحقق من إجراء تحديثات جديدة. الافتراضي هو 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. يتم تثبيت هذه الأداة باستخدام .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 باستخدام Command 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 . اسم الخدمة نفسها هو WVDCUS .WVDCUS Service . في علامة تبويب الاسترداد ، حدد الفشل الأول والثاني Restart the Service .ApplyStart
يمكنك رؤية معلومات مفصلة حول صحة الخدمة ، والفشل ، والرسائل الإعلامية في سجل الأحداث.
eventvwr.msc حيث يمكنك العثور على معلومات مفصلة في ملفات السجل.WVDCUSLog .
بمجرد ارتفاع خدمة Windows وفي حالة تشغيلها ، ستبدأ في إنشاء بيانات القياس عن بُعد وتخزينها في مورد Application Insights المتقدمة من خلال معرف TelemetryKey . نظرًا لأن مورد Application Insights تم توصيله Log Analytics Workspace أثناء عملية التوفير ، فقد تستفيد من جميع الميزات المتوفرة في مورد Log Analytics Workspace . لمزيد من التفاصيل ، راجع: https://docs.microsoft.com/en-us/azure/azure-monitor/log-query/log-query-overview
يتم تخزين بيانات القياس عن بُعد كأحداث مخصصة وقد تجدها في جدول customEvents . يتيح لك ذلك عرض البيانات من جميع المضيفين وتحليلها ومشاهدة الرسائل الصحية والمعلارة الحالية حول إدارة التصحيح من العديد من المنظورات والنطاق الزمني المحدد. لمزيد من التفاصيل ، راجع:

يعد تحليل البيانات من خلال الاستعلامات ووجهات النظر المتعددة ميزة قوية للغاية. ومع ذلك ، بالنسبة للمراقبة اليومية ، تحتاج عادةً إلى رؤية الحالة الإجمالية لمضيفيك من خلال نوع من التقارير. لحسن الحظ ، فإن مورد Log Analytics Workspace لديه مثل هذه القدرة أيضًا.
يمكنك إنشاء مصنف مخصص مع استعلامات مخصصة على بيانات القياس عن بعد وتقديم النتائج من خلال التمثيل المرئي ذي الصلة.
لمزيد من التفاصيل راجع: 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 Query .CheckForUpdatesIntervalHours . عندما يكون النطاق الزمني أقل ، قد لا ترى أي بيانات.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 لديها قدرة مدمجة. لمزيد من التفاصيل ، راجع:
فيما يلي كيف يمكنك إنشاء تنبيه بناءً على مجموعة من الشروط.
Application Insights ، Logs الأقسام ، وإغلاق نافذة مع استفسارات مثالcustomEvents .See in query editorNew alert rule في شريط الأدواتScope كما هي - يجب أن تشير إلى تصحيح مثيل Application Insights .Condition ، حدد قيمة النطاق الزمني - يجب محاذاة هذه القيمة مع إعدادات CheckForUpdatesIntervalHours . عندما يكون النطاق الزمني أقل ، قد لا ترى أي بيانات.Search queryNumber of results ، Greater than قيمة العتبة 0 - في الأساس ، سيتم تشغيل التنبيه إذا Failed بعض السجلات الجديدة في الحالة ، Reboot Required ، وتم إرجاع Error عن طريق الاستعلام.Action 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_monitoring.Create 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 .
تنبيه البريد الإلكتروني الذي يمكنك تلقيه لجذب انتباهك.
