Script guardar visor de sucesos de windows server 2003

Cooltan - 07/11/2021 16:31
Buenas tardes a todos y todas. Mi intención es crear un script para guardar automáticamente los registros de eventos del visor de sucesos de un servidor 2003 en diferentes archivos como "Aplicación", "Sistema" y "Seguridad".

Actualmente, tengo un script que realiza una llamada con "runas" para solicitar la contraseña de administrador, abrir el visor de sucesos y manualmente guardar cada registro uno por uno en una ubicación y luego borrar el registro, lo que resulta muy tedioso.

Me gustaría pedir ayuda a alguien para crear un script que, al ejecutarlo y proporcionar mi contraseña, se encargue de guardar y eliminar automáticamente los registros, ya que no he encontrado información específica sobre Windows Server 2003. Aunque he encontrado información sobre cómo hacerlo en 2008 utilizando PowerShell, este no es mi caso.

Agradecería mucho cualquier ayuda.

¡Gracias y saludos!
3dpoder - 12/04/2023 11:52
En primer lugar, una opción sería utilizar el comando "wevtutil" que permite exportar el registro de eventos a un archivo. Aquí te dejamos un ejemplo de cómo podrías utilizarlo:

[CODE]wevtutil epl System C:\Logs\System.evtx
wevtutil epl Application C:\Logs\Application.evtx
wevtutil epl Security C:\Logs\Security.evtx
[/CODE]

Este código exportaría los registros de eventos de los tres tipos (sistema, aplicación y seguridad) a archivos separados en la ruta "C:\Logs". Luego, podrías utilizar un script de borrado para eliminar los registros de eventos originales.

Otra opción sería utilizar el módulo de Python "win32evtlogutil" que permite acceder a los registros de eventos de Windows. Aquí te dejo un ejemplo de cómo podrías utilizarlo:

[CODE]import win32evtlogutil
import win32evtlog

server = 'localhost' # o el nombre de tu servidor
logtype = 'Application'
hand = win32evtlog.OpenEventLog(server,logtype)
flags = win32evtlog.EVENTLOG_BACKWARDS_READ|win32evtlog.EVENTLOG_SEQUENTIAL_READ
total = win32evtlogutil.GetNumberOfEventLogRecords(hand)

# Iterar a través de los registros de eventos y guardarlos en un archivo
events = win32evtlog.ReadEventLog(hand, flags, 0)
for event in events:
print(event.StringInserts) # aquí podrías guardar los valores en un archivo
win32evtlogutil.CloseEventLog(hand)
[/CODE]

Este código accedería al registro de eventos de aplicación del servidor local y guardaría los registros en un archivo. Podrías utilizar un código similar para acceder a los otros dos registros de eventos y luego borrar los registros de eventos originales.

Espero que esto te ayude a solucionar tu problema.