該項目是針對基於Windows的OS的輕巧補丁管理工具。它有助於監視和控制OS的補丁管理。最初是為了幫助基於Windows Virtual Desktop(WVD)解決方案的補丁管理而編寫的,但對於其他基於WVD的解決方案或設置也非常有效。 (例如,家庭計算機的補丁管理)
對於基於Windows的工作負載的補丁管理,您通常擁有許多企業級選項。例如,如果WVD補丁管理管理也將System Center Configuration Manager,Windows更新,Windows Update的Windows Update,也可以將其註入基本WVD圖像。
但是有時候,也許您沒有設置,可以使用上面突出顯示的工具。也許您有許多廣告域和森林,也許您可能會缺少一些功能,例如報告,儀表板,遙測,僅舉幾例。
這是您可能從試圖滿足此類需求的項目中受益的時候。
通常,我們的建議始終是首先查看上面描述的專業解決方案,並且只有當您看到那些專業解決方案的差距時,您可能想檢查此開源項目。


遙測數據現在支持來自Azure平台的信息(如果VM在Azure平台內運行)。有關VM元數據的信息,例如Azure VM名稱(VMResourCename),資源組名稱(ResourceGroupName)和訂閱ID(sisscriptionID)。基本上信息定義了Azure VM的位置。
這允許支持更豐富的過濾功能並識別Azure VM以及在定義此類VM的何處。如果這種託管環境不在Azure平台內運行,則此類信息在遙測標題中不可用。
Application Insights和Log Analytics Workspace 。您還可以根據需要創建免費的Azure帳戶:https://azure.microsoft.com/en-us/free WVDCUS.zip包含需要部署到受監視主機的二進製文件Source code.zip此項目的源代碼Source code.tar.gz此項目的源代碼以不同的焦油/zip格式WVDCUS.zip 。在下載目錄中,右鍵單擊文件上的Properties ,並在復選框Unblock上標記。單擊OK 。WVDCUS.zip文件的內容提取到WVDCUS目錄中。例如進入目錄: C:Program FilesWVDCUS Log Analytics Workspace ,在首選區域中,具有唯一名稱和付費-as-you-go計劃:https://docs.microsoft.com/en-us/azure/azure-monitor/azure-monitor/quick-create-worke-worke-worke-workspace-create-a-workspace-a-workspaceApplication Insights與以前的資源相同的區域,具有唯一名稱,具有基於工作空間的選項,然後選擇您之前創建的工作區。 https://docs.microsoft.com/en-us/azure/azure-monitor/app/create-workspace-resource-resource#create-workspace-基於基於 - 庫Application Insights上,資源單擊Overview和復制Instrumentation Key別名Telemetry Key將在以後在配置期間使用。 C:Program FilesWVDCUSWVDCUS.Service.exe.configTelemetryKey並替換內容00000000-0000-0000-0000-000000000000您可以從Instrumentation Key項目中獲得的Application Insights資源”獲得的值。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服務運行,您必須在安裝的計算機上具有管理員憑據。您需要使用.NET運行時的一部分installutil.exe工具。該工具與.NET框架安裝到文件夾%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將失敗。錯誤是事件日誌已通過控制台應用程序註冊。如果失敗,只需使用Command Bellow(刪除事件日誌)卸載Windows服務,然後再次安裝Windows Service。C:WindowsMicrosoft.NETFramework64v4.0.30319InstallUtil.exe /u WVDCUS.Service.exeC:WindowsMicrosoft.NETFramework64v4.0.30319InstallUtil.exe WVDCUS.Service.exe 
services.msc您可以在其中找到只有顯示名稱WVDCUS Service的註冊Windows服務。服務本身的名稱是WVDCUS 。WVDCUS Service 。在恢復選項卡上指定第一次和第二故障Restart the Service操作。ApplyStart
您可以在事件日誌中查看有關服務健康,失敗和信息消息的詳細信息。
eventvwr.msc ,您可以在日誌文件中找到詳細信息。WVDCUSLog日誌。
Windows服務啟動並在運行狀態下,它將開始生成遙測數據,並將其存儲到通過TelemetryKey標識符的配置Application Insights資源中。由於Application Insights資源與在配置過程中的Log Analytics Workspace連接,因此您可能會從Log Analytics Workspace Workspace資源中可用的所有功能中受益。有關更多詳情
遙測數據被存儲為自定義事件,您可能會在customEvents表中找到它們。這使您可以查看和分析所有主機的數據,並從許多角度和指定的時間範圍內查看有關補丁管理的當前狀態,健康和信息消息。有關更多詳情

通過查詢和多個觀點分析數據是非常強大的功能。但是,對於日常監控,通常需要通過某種報告快速查看主機的整體狀態。幸運的是, Log Analytics Workspace資源也具有這樣的功能。
您可以在遙測數據上使用自定義查詢創建自定義工作簿,並通過相關的視覺表示形式呈現結果。
有關更多詳細信息,請參見:https://docs.microsoft.com/en-us/azure/azure-monitor/platform/workbooks-oberview
Application Insights資源,部分WorkbooksCheckForUpdatesIntervalHours設置對齊。當時間範圍較低時,您可能看不到任何數據。Run Query按鈕以渲染最新數據的圖表Done Editing按鈕Save按鈕,然後以某些首選名稱保存工作簿。下次您可以直接進入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;
您可能還需要查看顯示每個主機的當前狀態的報告。您可以擴展使用新報告部分創建的工作簿。
Edit按鈕Add按鈕。單擊它,然後選擇Add Query 。CheckForUpdatesIntervalHours設置對齊。當時間範圍較低時,您可能看不到任何數據。Run Query按鈕以查看最新數據的結果Done Editing按鈕Save按鈕 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/learn/tutorial-response
這是您可以根據條件集創建警報的方式。
Application Insights資源,部分Logs ,關閉窗口和示例查詢customEvents表旁邊選擇Little Eye Icon。See in query editorNew alert rule按鈕Scope - 應該指向糾正Application Insights實例。Condition部分,指定時間範圍值 - 此值必須與CheckForUpdatesIntervalHours設置對齊。當時間範圍較低時,您可能看不到任何數據。Search query文本框Number 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 = 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 ,這將觸發動作和注意力。
提醒您可以收到的電子郵件以吸引您的注意。
