Pregunta

He escrito una aplicación que recopila registros de Windows desde Linux, a través del paquete de WMI-cliente Zenoss.

Utiliza WQL para consultar el registro de eventos y analiza el retorno. Mi problema es tratar de encontrar la última entrada en el registro.

Me tropezó este que indica que use la columna de la NumberOfRecords en una consulta como este

Select NumberOfRecords from Win32_NTEventLogFile Where LogFileName = 'Application'

y utilizar el valor devuelto de que a medida que el más alto registro.

Mi pregunta es, yo he oído que el registro de eventos de Windows es un buffer circular, que es lo sobrescribe de los registros más antiguos por otros nuevos como el registro se llena. ¿Esto tendrá un impacto en NumberOfRecords, como si eso sucede, la propiedad "RecordNumber" de los acontecimientos continuará aumentando, sin embargo la realidad el número de registros en el registro de eventos no cambiaría (como para cada entrada escrita, uno se deja caer ).

¿Alguien puede arrojar alguna idea de cómo esto funciona realmente (si NumberOfRecords es el más alto RecordNumber, o el número real de eventos en el registro), y tal vez sugerir una solución?

Actualizar

Así que ahora sabemos que NumberOfRecords no funcionará por sí mismo debido a que el registro de eventos es una memoria cíclica. La solución MS es conseguir que el registro más antiguo y añadirlo a NumberOfRecords para obtener el último registro real.

Esto es posible a través de API de Windows, pero yo estoy llamando de forma remota desde Linux. ¿Alguien sabe cómo podría lograr esto en mi escenario?

Gracias

¿Fue útil?

Solución

NumberOfRecords no siempre será el número de registro máximo debido a que el registro es circular y el registro puede ser limpiado y usted puede tener 1 entrada pero es número de registro es de 1000.

La forma en que podría hacer esto mediante la API victoria sería la de obtener el número de registro más antiguo y añadir el número de registros en el registro para obtener el número de registro máximo. No se ve como Win32_NTEventLogFile tiene un campo de número de registro más antiguo para su uso.

¿Estás tratando de obtener el último disco cada vez que se consulta el registro? Puede utilizar TimeGenerated cuando se consulta Win32_NTLogEvent para conseguir todo> EMPRESA. Se puede recorrer la lista para encontrar su número de registro máximo.

Otros consejos

Se necesita el RecordNumber del registro más reciente, pero no hay forma rápida de conseguirlo. En general, usted tiene que:

SELECT RecordNumber FROM Win32_NTLogEvent WHERE LogFile='Application'

Y encontrar el máximo RecordNumber través de los resultados. Pero esto puede tomar decenas de segundos o minutos si el tamaño del archivo de registro es grande ... es muy lento.

Pero! Puede obtener el número de registros:

SELECT NumberOfRecords FROM Win32_NTEventlogFile WHERE LogfileName='Application'

Esto es muy rápido. Y luego reducir la selección a speedup la búsqueda del archivo más nuevo:

SELECT RecordNumber FROM Win32_NTLogEvent WHERE LogFile='Application' AND RecordNumber>='_number_of_records_'

El tiempo de ejecución de este <= que en el caso general.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top