Этот проект представляет собой инструмент управления плач легкого веса для ОС на основе Windows. Это помогает контролировать и контролировать управление патчами ОС. Первоначально написано, чтобы помочь с управлением исправлением для решений на основе Windows Virtual Desktop (WVD), но также очень хорошо работает для других решений или настройки на основе WVD. (Например, управление исправлениями для семейных компьютеров)
Для управления исправлением для рабочих нагрузок на основе Windows у вас обычно есть много вариантов уровня корпоративного уровня. Например, Manager Configuration Configuration, обновление Windows для бизнеса, обновление Windows, в случае управления патчами WVD также внедряет в базовое изображение WVD.
Но иногда, возможно, у вас нет настройки, которая позволяет использовать инструменты, выделенные выше. Может быть, у вас есть много рекламных доменов и лесов, возможно, вам, возможно, упустите некоторые возможности, такие как отчеты, информационные панели, телеметрия, чтобы назвать немногие.
Это когда вы можете извлечь выгоду из этого проекта, который пытается удовлетворить такие потребности.
Как правило, наша рекомендация всегда состоит в том, чтобы сначала смотреть на профессиональные решения, описанные выше, и только если вы видите некоторые пробелы с теми профессиональными решениями, вы можете проверить этот проект с открытым исходным кодом.


Данные телеметрии теперь поддерживают информацию, поступающую с платформы Azure (если виртуальная машина работает внутри платформы Azure). Информация о метаданных виртуальных машинах, таких как имя виртуальной машины Azure (vmresourcename), имя группы ресурсов (ResourceGroupName) и идентификатор подписки (подписка). В основном информация, где определяется ваша виртуальная машина Azure.
Это позволяет поддерживать более богатые возможности фильтрации и идентифицировать Azure VMS и где такие виртуальные машины определены. В случаях, когда эта среда хостинга не работает внутри платформы Azure, такая информация не доступна в заголовке телеметрии.
Application Insights службы и Log Analytics Workspace . Вы также можете создать бесплатную учетную запись Azure, если это необходимо: https://azure.microsoft.com/en-us/free WVDCUS.zip - содержит двоичные файлы, которые необходимо развернуть для контролируемых хостовSource code.zip - исходный код этого проектаSource code.tar.gz - исходный код этого проекта в разных формате TAR/ZipWVDCUS.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/learn/quick-create-workspace#create-aworkspaceApplication Insights на основе рабочей области в том же регионе, что и предыдущий ресурс, с уникальным именем, с опцией на основе рабочей области и выберите рабочее пространство, которое вы создали ранее. https://docs.microsoft.com/en-us/azure/azure-monitor/app/create-workspace-resource#create-workspace-resourceApplication Insights Resource 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-uapi-iupdatesearcher-searchWVDCUS.Console.exe.config
WVDCUS.Console.exe теперь, чтобы увидеть, правильно ли настроено приложение. Следите за любыми ошибками в выводе приложения. Если вы видите некоторые ошибки, убедитесь, что у вас достаточно разрешений. Приложение может проверить, загрузить и установить исправления, если они доступны.
После проверки конфигурации с приложением консоли вы можете завершить конфигурацию с регистрацией приложения для работы в качестве службы Windows. Чтобы зарегистрировать приложение для работы в качестве службы Windows, вы должны иметь учетные данные администратора на компьютере, где он установлен. Вам необходимо использовать инструмент installutil.exe , который является частью времени выполнения .NET. Этот инструмент установлен с помощью Framework .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 не удастся. Ошибка заключается в том, что журнал событий уже зарегистрирован приложением Console. Если сбой, просто удалите службу 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 . Название самого сервиса - 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 . Это позволяет вам просматривать и анализировать данные от всех хостов и видеть текущие, медицинские и информационные сообщения о управлении патчами с многих точек зрения и указанного временного диапазона. Более подробную информацию см.: 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 , раздельные 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;
Возможно, вы также захотите увидеть отчет, показывающий текущее состояние каждого хоста. Вы можете расширить только что созданную рабочую книгу с новой частью отчета.
EditAdd . Нажмите на него и выберите 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/tutorior-response
Вот как вы можете создавать оповещение на основе набора условий.
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 . См.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 .
Предветите электронное письмо, которое вы можете получить, чтобы привлечь ваше внимание.
