Este proyecto es una herramienta de gestión de parches de peso ligero para el sistema operativo basado en Windows. Ayuda a monitorear y controlar la gestión de parches del sistema operativo. Originalmente escrito para ayudar con la administración de parches para soluciones basadas en el escritorio virtual de Windows (WVD), pero también funciona muy bien para otras soluciones o configuraciones basadas en WVD. (Por ejemplo, gestión de parches para computadoras familiares)
Para la administración de parches para cargas de trabajo basadas en Windows, generalmente tiene muchas opciones de nivel empresarial. Por ejemplo, System Center Configuration Manager, Windows Update for Business, Windows Update, en el caso de WVD Patch Management también inyección en la imagen Base WVD.
Pero a veces, tal vez no tenga una configuración, lo que le permite usar herramientas resaltadas anteriormente. Tal vez tenga muchos dominios y bosques publicitarios, tal vez se le falte algunas capacidades como informes, paneles, telemetría, por nombrar pocos.
Esto es cuando podría beneficiarse de este proyecto que está tratando de abordar tales necesidades.
En general, nuestra recomendación siempre es buscar primero en las soluciones profesionales descritas anteriormente y solo si ve algunos huecos con esas soluciones profesionales, es posible que desee verificar este proyecto de código abierto.


Los datos de telemetría ahora admiten información proveniente de la plataforma Azure (si la VM se ejecuta dentro de la plataforma Azure). Información sobre metadatos de VM como Azure VM Name (VMResourCename), Nombre del grupo de recursos (ResourceGroupName) e ID de suscripción (suscriptionId). Básicamente, la información donde se define su VM Azure.
Esto permite admitir capacidades de filtrado más ricas e identificar las máquinas virtuales de Azure y donde se definen tales máquinas virtuales. En los casos en que este entorno de alojamiento no se ejecuta dentro de la plataforma Azure, dicha información no está disponible en el encabezado de telemetría.
Application Insights de servicio y Log Analytics Workspace . También puede crear una cuenta de Azure gratuita si es necesario: https://azure.microsoft.com/en-us/free WVDCUS.zip : contiene archivos binarios que deben implementarse en hosts monitoreadosSource code.zip - código fuente de este proyectoSource code.tar.gz - Código fuente de este proyecto en diferente formato TAR/ZIPWVDCUS.zip . En el directorio de descargas, haga clic derecho en Properties en el archivo y marque el Unblock la casilla de verificación. Haga clic en OK .WVDCUS.zip en todos los hosts monitoreados en el directorio WVDCUS . Por ejemplo, en el directorio: C:Program FilesWVDCUS Log Analytics Workspace de recursos en la región preferida, con nombre único y plan de pago-astou-go: https://docs.microsoft.com/en-us/azure/azure-monitor/learn/quick-create-workspace#create-a-workspaceApplication Insights de recursos basada en el espacio de trabajo en la misma región que el recurso anterior, con un nombre único, con opción basada en el espacio de trabajo y seleccione el espacio de trabajo que creó antes. https://docs.microsoft.com/en-us/azure/azure-monitor/app/create-workspace-resource#create-workspace basado en-resourceApplication Insights recién creado, haga clic en Overview y copie Telemetry Key Instrumentation Key que se utilizará más adelante durante la configuración. C:Program FilesWVDCUSWVDCUS.Service.exe.config en el bloc de notas (o cualquier otro editor de texto)TelemetryKey y reemplace el contenido 00000000-0000-0000-0000-000000000000 con el valor que obtuvo del recurso Application Insights del elemento Instrumentation Key .CheckForUpdatesIntervalHours a un valor más adecuado. Este valor especifica con qué frecuencia se debe realizar nuevas actualizaciones. El valor predeterminado es de 4 horas y el valor válido puede ser entre 1 y 590 horas.UpdatesSearchQuery a un valor más adecuado. Este valor especifica qué tipo y categorías de parches deben instalarse automáticamente. Descripción de la consulta y los parámetros están aquí: https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ff357803(v=vs.85) y aquí: https://docs.microsoft.com/en-us/windows/win32/api/wuapi/nf-wuapi-iupdateSearcher-searchWVDCUS.Console.exe.config
WVDCUS.Console.exe ahora para ver si la aplicación está configurada correctamente. Esté atento a cualquier error en la salida de la aplicación. Si ve algunos errores, verifique que tenga suficientes permisos. La aplicación puede verificar, descargar e instalar parches si están disponibles.
Una vez que verificó una configuración con la aplicación de consola, puede finalizar la configuración con el registro de la aplicación para ejecutar como servicio Windows. Para registrar la aplicación para ejecutar como servicio de Windows, debe tener credenciales de administrador en la computadora donde está instalada. Debe usar la herramienta installutil.exe , que forma parte de .NET Runtime. Esta herramienta se instala con el marco .NET a la carpeta %windir%Microsoft.NETFramework[64]<framework version> . Por ejemplo, la ruta predeterminada para la versión de 64 bits es %windir%Microsoft.NETFramework64v4.0.30319InstallUtil.exe .
Run as Administratorcd C:Program FilesWVDCUSC:WindowsMicrosoft.NETFramework64v4.0.30319InstallUtil.exe WVDCUS.Service.exeinstallutil.exe falla, verifique el registro de instalación para averiguar por qué. Por defecto, el registro está en la misma carpeta que el ejecutable del servicio.WVDCUS.Console.exe antes, entonces installutil.exe fallará. El error es que el registro de eventos ya está registrado por aplicación de consola. Si falla, simplemente desinstale el servicio de Windows con comando a continuación (elimina el registro de eventos) e instale el servicio Windows nuevamente.C:WindowsMicrosoft.NETFramework64v4.0.30319InstallUtil.exe /u WVDCUS.Service.exeC:WindowsMicrosoft.NETFramework64v4.0.30319InstallUtil.exe WVDCUS.Service.exe 
services.msc donde puede encontrar el servicio de Windows recién registrado en el nombre de nombre WVDCUS Service . El nombre del servicio en sí es WVDCUS .WVDCUS Service . En la pestaña de recuperación especifique para la primera y segunda falla Restart the Service .ApplyStart
Puede ver información detallada sobre la salud del servicio, las fallas, los mensajes informativos en un registro de eventos.
eventvwr.msc donde puede encontrar información detallada en los archivos de registro.WVDCUSLog .
Una vez que el servicio de Windows esté activo y en el estado en ejecución, comenzará a generar datos de telemetría y los almacenará en recursos de Application Insights aprovisionada a través del identificador TelemetryKey . Debido a que el recurso Application Insights se conectó con Log Analytics Workspace durante el proceso de aprovisionamiento, puede beneficiarse de todas las características disponibles en el recurso de Log Analytics Workspace . Para más detalles, consulte: https://docs.microsoft.com/en-us/azure/azure-monitor/log-Query/log-Query-overview
Los datos de telemetría se almacenan como eventos personalizados y puede encontrarlos en la tabla customEvents . Esto le permite ver y analizar datos de todos los hosts y ver los mensajes actuales del estado, la salud y la información sobre la gestión de parches desde muchas perspectivas y el rango de tiempo especificado. Para más detalles, consulte: https://docs.microsoft.com/en-us/azure/azure-monitor/log-Query/get-started-Queres

Analizar datos a través de consultas y múltiples perspectivas es una característica muy poderosa. Sin embargo, para el monitoreo diario, generalmente necesita ver rápidamente el estado general de sus anfitriones a través de algún tipo de informes. Afortunadamente, Log Analytics Workspace Resource también tiene tal capacidad.
Puede crear un libro de trabajo personalizado con consultas personalizadas sobre datos de telemetría y representar resultados a través de una representación visual relevante.
Para más detalles, consulte: https://docs.microsoft.com/en-us/azure/azure-monitor/platform/workbooks-overview
Application Insights , Workbooks de secciónCheckForUpdatesIntervalHours . Cuando el rango de tiempo es más bajo, es posible que no vea ningún dato.Run Query para representar el gráfico de los últimos datosDone EditingSave y guarde el libro de trabajo con un nombre preferido. La próxima vez puede ingresar directamente a las secciones Workbooks y hacer clic en Libro de trabajo acaba de crear el informe con los últimos datos.
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;
Es posible que también desee ver el informe que muestra el estado actual de cada host. Puede extender el libro de trabajo acaba de crear con el nuevo informe.
EditAdd . Haga clic en él y seleccione Add Query .CheckForUpdatesIntervalHours . Cuando el rango de tiempo es más bajo, es posible que no vea ningún dato.Run Query para ver los resultados de los últimos datosDone 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
Puede ver un informe de ejemplo combinado, que contiene dos partes en la imagen a continuación.

Finalmente, es posible que no tenga interés en verificar los informes diariamente. Tal vez quieras hacerlo solo si esto es realmente necesario. En este caso, puede beneficiarse de alertar el mecanismo que le notificará que algún anfitrión necesita su atención.
Nuevamente, Log Analytics Workspace tiene tal capacidad incorporada. Para más detalles, consulte: https://docs.microsoft.com/en-us/azure/azure-monitor/learn/tutorial-response
Así es como puede crear alerta basado en un conjunto de condiciones.
Application Insights , Logs de sección, cierre de la ventana con consultas de ejemplocustomEvents .See in query editorNew alert rule en la barra de herramientasScope como está, debe apuntar para corregir la instancia Application Insights .Condition , especifique el valor del rango de tiempo: este valor debe alinearse con la configuración de CheckForUpdatesIntervalHours . Cuando el rango de tiempo es más bajo, es posible que no vea ningún dato.Search queryNumber of results , Greater than y umbral del valor 0 , básicamente la alerta se activará si la consulta se Failed Reboot Required , se devuelve Error .Action Group existente. Haga clic en el botón Select action group . Si es necesario, haga clic para Create action group . Consulte 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
Esto debería desencadenar la acción y la atención cuando algún anfitrión caerá en uno de los estados Failed , Reboot Required , requerido, Error .
Alerta al correo electrónico que puede recibir para atraer su atención.
