Mostrar detalles del evento en el mensaje al adjuntar una tarea a un evento

Mostrar detalles del evento en el mensaje al adjuntar una tarea a un evento

Cuando intento quitar hardware de forma segura, Windows 10 me dice que un programa está usando el hardware, pero no me dice qué programa es. Sin embargo, descubrí que esta información está registrada en el Visor de eventos en Sistema como Evento 225 como tal:

La aplicación \Device\HarddiskVolume3\Program Files... con ID de proceso 4424 detuvo la eliminación o expulsión del dispositivo USB....

Esta es información bastante útil que me gustaría ver sin tener que recurrir al visor de eventos cada vez. Descubrí que hay un botón en el Visor de eventos que dice Adjuntar tarea a este evento... Cuando se presiona, ofrece la opción de mostrar un mensaje cada vez que se registra este evento. Me gustaría que la tarea muestre los detalles del evento cada vez que se registra el evento 225. Parece que podría ser posible, pero no soy un experto a nivel de sistemas.

¿Existe una manera fácil de lograr mi objetivo? Si no aparece en el mensaje en pantalla, ¿hay alguna forma de programar un archivo por lotes para que se ejecute y me proporcione esta información?

Respuesta1

La acción "mostrar un mensaje" está obsoleta y es posible que en realidad no haga nada. En su lugar, ¡puedes usar PowerShell! Guarde esto como un .ps1archivo en algún lugar de la computadora, por ejemplo C:\evtmsg.ps1:

Add-Type -AssemblyName System.Windows.Forms
$lastEvt = Get-WinEvent -LogName 'System' -MaxEvents 20 | ? { $_.Id -eq 225 } | select -First 1
[System.Windows.Forms.MessageBox]::Show(($lastEvt.Message), 'Ejection Failed')

Este script obtiene la instancia más reciente del evento 225 del registro del sistema y utiliza la biblioteca de Windows Forms para mostrar su mensaje.

Utilice el visor de eventosAdjuntar tarea a este eventocomando en una instancia del evento 225. En la pantalla Acción, elija "iniciar un programa" y luego especifique powershellque se ejecute el programa/script. En el cuadro "agregar argumentos", coloque esta línea, ajustada según donde guardó el script de PowerShell:

-executionpolicy bypass -windowstyle hidden -file C:\evtmsg.ps1

El cambio debería entrar en vigor inmediatamente después de crear la tarea.

Respuesta2

Enviar notificación por correo electrónico cuando se genere un ID de evento específico

Tengo una solución similar que quería compartir en caso de que alguien pueda usarla, ya que parece ayudarme y gritarme solo cuando lo necesito explícitamente en función de algo específico.ID de eventos.

Planificación

Esta solución utiliza unProgramador de tareastrabajo que tiene muchas diferentes Desencadenantesdelen un eventopara cuando se vaya a ejecutar. Usted especifica el especificoID de eventoeso es "desencadenar"una ejecución.

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí


Secuencia de comandos de PowerShell

Aquí está unPotencia Shellscript que utiliza una cuenta de Gmail con una contraseña para enviar un correo electrónico que incluirá el detalle de los eventos aplicables en su cuerpo.

Nota: Debe pasar la contraseña de la cuenta de Gmail como primer argumento del script de PowerShell.

$EmailPassword=$args[0]
$event = get-eventlog -LogName System -EntryType Error -newest 1

$PCName = $env:COMPUTERNAME
$Username = "LocalMailBox"
$EmailBody = $event | format-list -property * | out-string
$EmailFrom = "$PCName <[email protected]>"
$EmailTo = "[email protected]" 
$EmailSubject = "New Event Log [System]"
$SMTPServer = "smtp.gmail.com" 
Write-host "Sending Email"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) 
$SMTPClient.EnableSsl = $true 
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($Username, $EmailPassword); 
$SMTPClient.Send($EmailFrom, $EmailTo, $EmailSubject, $EmailBody)
Start-Sleep -s 10

Desde elAcciónpestaña creará unAccióndefinido como:

  • Acción: Start a program
  • Programa/guión: Powershell
  • Agregue argumentos (opcional): -ExecutionPolicy Bypass -File "C:\Scripts\PSScript.ps1" "GmailPassword"
  • Comience en (opcional): C:\Windows\System32\WindowsPowerShell\v1.0 ingrese la descripción de la imagen aquí

Desde elGeneralpestaña de la tarea programada, asegúrese de queEjecutar ya sea que el usuario haya iniciado sesión o noy elEjecutar con los privilegios más altosambas opciones están seleccionadas.

ingrese la descripción de la imagen aquí


El correo electrónico

Con todo lo enumerado anteriormente configurado tal como se especifica, esto garantizará que cuando esosID de eventos del sistemaSe generan los que usted definió "desencadenantes" para eso se enviará un correo electrónico y, con suerte, con detalles aplicables según el evento que desencadena cada uno.

Sólo menciono esto porque he notado que si dos eventos que coinciden con el Potencia ShellLa lógica de $event | format-list -property * | out-stringse crea rápidamente, que el cuerpo del correo electrónico contendrá los detalles del último evento según el tiempo.

Recuerde que independientemente delID de eventocontenido del cuerpo e incluso si no es pertinente a los eventos específicos que definió como desencadenantes, es seguro que aquellos definidos como desencadenantes efectivamente desencadenaron este correo electrónico, así que preste atención cuando lo reciba.

ingrese la descripción de la imagen aquí

información relacionada