Ce projet est un outil de gestion des correctifs légers pour le système d'exploitation basé sur Windows. Il aide à surveiller et à contrôler la gestion des patchs de la SG. Écrit à l'origine pour aider à la gestion des correctifs pour les solutions basées sur Windows Virtual Desktop (WVD), mais fonctionne également très bien pour d'autres solutions ou configurations non basées sur WVD. (Par exemple, la gestion des patchs pour les ordinateurs familiaux)
Pour la gestion des correctifs pour les charges de travail basées sur Windows, vous disposez généralement de nombreuses options de niveau d'entreprise. Par exemple, System Center Configuration Manager, Windows Update for Business, Windows Update, dans le cas de la gestion des correctifs WVD également de l'injection dans l'image WVD de base.
Mais parfois, vous n'avez peut-être pas de configuration qui vous permet d'utiliser des outils mis en évidence ci-dessus. Peut-être que vous avez de nombreux domaines publicitaires et forêts, peut-être que vous manquez peut-être des capacités comme les rapports, les tableaux de bord, la télémétrie pour n'en nommer pas.
C'est à ce moment que vous pourriez bénéficier de ce projet qui essaie de répondre à ces besoins.
Généralement, notre recommandation est toujours de consulter d'abord les solutions professionnelles décrites ci-dessus et uniquement si vous voyez des lacunes avec les solutions professionnelles que vous voudrez peut-être vérifier ce projet open source.


Les données de télémétrie prennent désormais en charge les informations provenant de la plate-forme Azure (si la machine virtuelle s'exécute dans la plate-forme Azure). Informations sur les métadonnées VM comme le nom VM Azure (VMResourCename), le nom du groupe de ressources (ResourceGroupName) et l'identifiant d'abonnement (abonnement). Fondamentalement, des informations sur lesquelles votre machine virtuelle Azure est définie.
Cela permet de prendre en charge les capacités de filtrage plus riches et d'identifier les machines virtuelles Azure et lorsque ces machines virtuelles sont définies. Dans les cas où cet environnement d'hébergement ne fonctionne pas dans la plate-forme Azure, ces informations ne sont pas disponibles dans l'en-tête de télémétrie.
Application Insights de service et Log Analytics Workspace . Vous pouvez également créer un compte Azure gratuit si nécessaire: https://azure.microsoft.com/en-us/free WVDCUS.zip - contient des fichiers binaires qui doivent être déployés aux hôtes surveillésSource code.zip - code source de ce projetSource code.tar.gz - Code source de ce projet au format TAR / ZIP différentsWVDCUS.zip . Dans le répertoire des téléchargements, Properties de clic droit du fichier et marquent la case Unblock . Cliquez sur OK .WVDCUS.zip sur tous les hôtes surveillés dans le répertoire WVDCUS . Par exemple dans le répertoire: C:Program FilesWVDCUS Log Analytics Workspace de ressources dans la région préférée, avec un nom unique et un plan de paiement-asyou-go: https://docs.microsoft.com/en-us/azure/azure-monitor/learn/quick-create-workspace #create-a-workspacepaceApplication Insights de ressources basées sur l'espace de travail dans la même région que la ressource précédente, avec un nom unique, avec une option basée sur l'espace de travail et sélectionnez l'espace de travail que vous avez créé auparavant. https://docs.microsoft.com/en-us/azure/azure-monitor/app/create-workspace-resource#create-workspace basked-resourceApplication Insights juste créée, cliquez sur Resource Overview et copie de la clé Telemetry Key de la touche Instrumentation Key qui sera utilisée plus tard lors de la configuration. C:Program FilesWVDCUSWVDCUS.Service.exe.config dans le bloc-notes (ou tout autre éditeur de texte)TelemetryKey et remplacez le contenu 00000000-0000-0000-0000-000000000000 avec la valeur que vous avez obtenue à partir de la ressource Application Insights à partir de l'élément Instrumentation Key .CheckForUpdatesIntervalHours en valeur plus appropriée. Cette valeur spécifie la fréquence à laquelle vérifier les nouvelles mises à jour doit être effectuée. La valeur par défaut est de 4 heures et la valeur valide peut être comprise entre 1 et 590 heures.UpdatesSearchQuery en valeur plus appropriée. Cette valeur spécifie le type et les catégories de correctifs doivent être installés automatiquement. Description des requêtes et des paramètres sont ici: https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ff357803(v=vs.85) et ici: https://docs.microsoft.com/en-us/windows/win32/api/wuapi/nf-wuapi-iupdatesarcher-searchWVDCUS.Console.exe.config
WVDCUS.Console.exe maintenant pour voir si l'application est configurée correctement. Surveillez toutes les erreurs dans la sortie de l'application. Si vous voyez des erreurs, vérifiez que vous avez suffisamment d'autorisations. L'application peut vérifier, télécharger et installer des correctifs s'ils sont disponibles.
Une fois que vous avez vérifié une configuration avec l'application Console, vous pouvez finaliser la configuration avec l'enregistrement de l'application pour s'exécuter en tant que service Windows. Pour enregistrer l'application pour s'exécuter en tant que service Windows, vous devez avoir des informations d'identification administratrices sur l'ordinateur où il est installé. Vous devez utiliser l'outil installutil.exe , qui fait partie de .NET Runtime. Cet outil est installé avec le .NET Framework dans le dossier %windir%Microsoft.NETFramework[64]<framework version> . Par exemple, le chemin par défaut pour la version 64 bits est %windir%Microsoft.NETFramework64v4.0.30319InstallUtil.exe .
Run as Administratorcd C:Program FilesWVDCUSC:WindowsMicrosoft.NETFramework64v4.0.30319InstallUtil.exe WVDCUS.Service.exeinstallutil.exe échoue, vérifiez le journal d'installation pour savoir pourquoi. Par défaut, le journal se trouve dans le même dossier que l'exécutable de service.WVDCUS.Console.exe avant - alors l' installutil.exe échouera. L'erreur est que le journal des événements est déjà enregistré par application Console. En cas d'échec, il suffit de désinstaller le service Windows avec la commande Bellow (supprime le journal des événements) et de réinstaller le service Windows à nouveau.C:WindowsMicrosoft.NETFramework64v4.0.30319InstallUtil.exe /u WVDCUS.Service.exeC:WindowsMicrosoft.NETFramework64v4.0.30319InstallUtil.exe WVDCUS.Service.exe 
services.msc où vous pouvez trouver un service Windows enregistré sous le WVDCUS Service Nom d'affichage. Le nom du service lui-même est WVDCUS .WVDCUS Service . Sur l'onglet de récupération Spécifiez pour le premier et le deuxième échec Restart the Service .ApplyStart
Vous pouvez voir des informations détaillées sur la santé du service, les échecs, les messages d'information dans un journal des événements.
eventvwr.msc où vous pouvez trouver des informations détaillées dans les fichiers journaux.WVDCUSLog .
Une fois le service Windows en hausse et en cours d'exécution, il commencera à générer des données de télémétrie et à les stocker dans la ressource d'application Provisioned Application Insights via TelemetryKey Identifier. Étant donné que la ressource Application Insights était connectée à Log Analytics Workspace pendant le processus de provisioning, vous pourriez bénéficier de toutes les fonctionnalités disponibles dans la ressource de Log Analytics Workspace . Pour plus de détails, voir: https://docs.microsoft.com/en-us/azure/azure-monitor/log-query/log-Query-overview
Les données de télémétrie sont stockées comme des événements personnalisés et vous pourriez les trouver dans le tableau customEvents . Cela vous permet de visualiser et d'analyser les données de tous les hôtes et de voir les messages actuels de l'état, de la santé et de l'information sur la gestion des correctifs sous de nombreux angles et la plage de temps spécifiée. Pour plus de détails, voir: https://docs.microsoft.com/en-us/azure/azure-monitor/log-query/get-started-queries

L'analyse des données via des requêtes et des perspectives multiples est une fonctionnalité très puissante. Cependant, pour la surveillance quotidienne, vous devez généralement voir rapidement l'état global de vos hôtes grâce à une sorte de rapport. Heureusement, la ressource Log Analytics Workspace a également une telle capacité.
Vous pouvez créer un classeur personnalisé avec des requêtes personnalisées sur des données de télémétrie et rendre les résultats grâce à une représentation visuelle pertinente.
Pour plus de détails, voir: https://docs.microsoft.com/en-us/azure/azure-monitor/platform/workbooks-verview
Application Insights , Workbooks de sectionCheckForUpdatesIntervalHours . Lorsque la plage de temps est plus faible, vous ne verrez peut-être aucune donnée.Run Query pour rendre le graphique à partir des dernières donnéesDone EditingSave et enregistrez le classeur sous un nom préféré. La prochaine fois, vous pourrez vous rendre directement dans les sections Workbooks et cliquez sur un classeur de création pour voir le rapport avec les dernières données.
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;
Vous voudrez peut-être également voir un rapport indiquant l'état actuel de chaque hôte. Vous pouvez prolonger le classeur qui vient d'étendre avec une nouvelle partie du rapport.
EditAdd . Cliquez dessus et sélectionnez Add Query .CheckForUpdatesIntervalHours . Lorsque la plage de temps est plus faible, vous ne verrez peut-être aucune donnée.Run Query pour voir les résultats des dernières donnéesDone 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
Vous pouvez voir un exemple de rapport combiné - contenant deux parties sur l'image ci-dessous.

Enfin, vous n'aurez peut-être pas intérêt à vérifier quotidiennement les rapports. Peut-être que vous voulez le faire uniquement si cela est vraiment nécessaire. Dans ce cas, vous pourriez bénéficier d'un mécanisme d'alerte qui vous informera que certains hôtes ont besoin de votre attention.
Encore une fois, Log Analytics Workspace a une telle capacité intégrée. Pour plus de détails, voir: https://docs.microsoft.com/en-us/azure/azure-monitor/learn/tutorial-response
Voici comment créer une alerte en fonction de l'ensemble des conditions.
Application Insights , Logs de section, fenêtre fermer avec des examens de requêtescustomEvents .See in query editorNew alert rule dans la barre d'outilsScope telle qu'elle est - devrait pointer vers l'instance Application Insights .Condition , spécifiez la valeur de la plage de temps - Cette valeur doit être alignée sur les paramètres de CheckForUpdatesIntervalHours . Lorsque la plage de temps est plus faible, vous ne verrez peut-être aucune donnée.Search queryNumber of results , Greater than et valeur de seuil 0 - Fondamentalement, l'alerte sera déclenchée si un nouvel enregistrement qui est dans l'état Failed , Reboot Required , Error a été renvoyée par requête.Action Group existant. Cliquez sur le bouton Select action group . Si nécessaire, cliquez pour Create action group . Voir 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
Cela devrait déclencher l'action et l'attention lorsque un hôte tombera dans l'un des états Failed , Reboot Required , Error .
Alerte e-mail que vous pouvez recevoir pour attirer votre attention.
