このプロジェクトは、WindowsベースのOS用の軽量パッチ管理ツールです。 OSのパッチ管理を監視および制御するのに役立ちます。もともとは、Windows Virtual Desktop(WVD)ベースのソリューションのパッチ管理を支援するために書かれていますが、他のWVDベースのソリューションまたはセットアップにも非常に適しています。 (たとえば、ファミリーコンピューターのパッチ管理)
Windowsベースのワークロードのパッチ管理には、通常、多くのエンタープライズレベルのオプションがあります。たとえば、WVDパッチ管理の場合、ベースWVD画像へのインジェクションの場合、システムセンター構成マネージャー、ビジネスのWindows Update、Windows Update。
しかし、時には、上記で強調表示されているツールを使用できるセットアップがない場合があります。たぶん、あなたは多くの広告ドメインと森を持っているかもしれませんが、たぶん、いくつかの名前を付けるために、レポート、ダッシュボード、テレメトリーなどの機能が欠けているかもしれません。
これは、このようなニーズに対処しようとしているこのプロジェクトの恩恵を受ける可能性がある場合です。
一般的に、私たちの推奨事項は、上記のプロフェッショナルなソリューションを常に最初に見ることであり、これらの専門的なソリューションとのギャップが表示された場合にのみ、このオープンソースプロジェクトをチェックしたい場合があります。


Telemetryデータは、Azureプラットフォームからの情報をサポートするようになりました(VMがAzureプラットフォーム内で実行されている場合)。 Azure VM名(VMResourcename)、リソースグループ名(ResourceGroupName)、およびサブスクリプションID(SubscriptionID)などのVMメタデータに関する情報。基本的に、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このプロジェクトのソースコードは、さまざまなtar/zip形式ですWVDCUS.zipをダウンロードします。ダウンロードディレクトリでは、ファイルのPropertiesを右クリックし、チェックボックスをUnblockます。 OKをクリックします。WVDCUS.zipファイルのコンテンツをWVDCUSディレクトリに抽出します。たとえば、ディレクトリに: C:Program FilesWVDCUS Log Analytics Workspaceを作成します:https://docs.microsoft.com/en-uzure/azure-monitor/learn/quick-crekse-crekspace#creksepace-a-workspaceApplication Insightsを作成し、ワークスペースベースのオプションを備えた一意の名前を備えており、以前に作成したワークスペースを選択します。 https://docs.microsoft.com/en-us/azure/azure-monitor/app/create-workspace-resource-create-workspace-sourceApplication Insightsリソースをクリックして、 Overviewクリックして、構成中に後で使用されるInstrumentation KeyエイリアスTelemetry 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サービスとして実行するためにアプリケーションを登録するには、インストールされているコンピューターに管理者資格情報が必要です。 .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サービスを再度インストールします。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を開きます。 [回復]タブで、最初の障害と2回目の障害を指定します。 Restart the Service 。ApplyをクリックしますStartボタンをクリックします
イベントログで、サービスの健康、失敗、情報メッセージに関する詳細情報を見ることができます。
eventvwr.mscログファイルで詳細情報を見つけることができる場合。WVDCUSLogログを検索します。
Windowsサービスがアップし、実行状態が実行されると、Telemetryデータの生成が開始され、 TelemetryKey Identifierを介してプロビジョニングされたApplication Insightsリソースに保存されます。 Application Insightsリソースは、プロビジョニングプロセス中にLog Analytics Workspaceに接続されていたため、 Log Analytics Workspaceリソースで利用できるすべての機能の恩恵を受ける可能性があります。詳細については、https://docs.microsoft.com/en-us/azure/azure-monitor/log-query/log-query-overviewを参照してください
テレメトリーデータはカスタムイベントとして保存され、 customEventsテーブルにそれらを見つけることができます。これにより、すべてのホストからのデータを表示および分析し、多くの観点からパッチ管理に関する現在の状態、健康、および情報メッセージを確認することができます。詳細については、https://docs.microsoft.com/en-us/azure/azure-monitor/log-query/get-started-queriesを参照してください

クエリと複数の視点を介してデータを分析することは、非常に強力な機能です。ただし、毎日の監視をするには、通常、いくつかのレポートを通じてホストの全体的な状態をすばやく確認する必要があります。幸いなことに、 Log Analytics Workspaceリソースにはこのような機能もあります。
テレメトリデータを介したカスタムクエリを使用してカスタムワークブックを作成し、関連する視覚表現を通じて結果をレンダリングできます。
詳細については、https://docs.microsoft.com/en-us/azure/azure-monitor/platform/workbooks-overviewを参照してください
Application Insightsリソース、セクションWorkbooksに移動しますCheckForUpdatesIntervalHours設定と整合する必要があります。時間範囲が低い場合は、データが表示されない場合があります。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
組み合わせた例レポート - 下の写真に2つの部分を含む。

最後に、毎日レポートをチェックすることに興味がないかもしれません。たぶん、これが本当に必要な場合にのみやりたいと思うでしょう。この場合、一部のホストがあなたの注意が必要であることを通知する警告メカニズムから恩恵を受けるかもしれません。
繰り返しますが、 Log Analytics Workspaceはこのような組み込み機能があります。詳細については、https://docs.microsoft.com/en-us/azure/azure-monitor/learn/tutorial-responseを参照してください
一連の条件に基づいてアラートを作成する方法は次のとおりです。
Application Insightsリソース、セクションLogs 、例のクエリを使用してウィンドウを閉じるcustomEventsテーブルの横にあるLittle Eyeアイコンを選択します。See in query editorNew alert ruleボタンをクリックしますScopeをそのまま保持します - Application Insightsインスタンスを修正することを指し示すはずです。Conditionに焦点を当て、時間範囲の値を指定します - この値は、 CheckForUpdatesIntervalHours設定と一致する必要があります。時間範囲が低い場合は、データが表示されない場合があります。Search queryテキストボックスにコピー/貼り付けますNumber of resultsに基づいてアラートロジックを指定し、しきい値0 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に陥ると、アクションと注意がトリガーされます。
注意を引くために受け取ることができる電子メールをアラートします。
