Exibir detalhes do evento na mensagem ao anexar uma tarefa a um evento

Exibir detalhes do evento na mensagem ao anexar uma tarefa a um evento

Quando tento remover hardware com segurança, o Windows 10 informa que um programa está usando o hardware, mas não informa qual programa é. Descobri que essas informações são registradas no Visualizador de Eventos em Sistema como Evento 225 como tal:

O aplicativo \Device\HarddiskVolume3\Program Files... com ID de processo 4424 interrompeu a remoção ou ejeção do dispositivo USB....

Esta é uma informação muito útil que eu gostaria de ver sem precisar acessar o visualizador de eventos todas as vezes. Descobri que existe um botão no Visualizador de Eventos que indica Anexar tarefa a este evento... Quando pressionado, oferece a opção de exibir uma mensagem sempre que esse evento for registrado. Gostaria que a tarefa exibisse os detalhes do evento sempre que o evento 225 fosse registrado. Parece que seria possível, mas não sou um especialista em nível de sistema.

Existe uma maneira fácil de atingir meu objetivo? Se não estiver na mensagem de exibição, existe uma maneira de criar um script de arquivo em lote para execução, em vez de me fornecer essas informações?

Responder1

A ação "exibir uma mensagem" está obsoleta e pode não fazer nada. Em vez disso, você pode usar o PowerShell! Salve isso como um .ps1arquivo em algum lugar do computador, por exemplo 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 obtém a instância mais recente do evento 225 do log do sistema e usa a biblioteca Windows Forms para exibir sua mensagem.

Use o Visualizador de EventosAnexar tarefa a este eventocomando em uma instância do evento 225. Na tela Ação, escolha "iniciar um programa" e especifique powershella execução do programa/script. Na caixa “adicionar argumentos”, coloque esta linha, ajustada para onde você salvou o script do PowerShell:

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

A alteração deverá entrar em vigor imediatamente após a criação da tarefa.

Responder2

Enviar notificação por e-mail quando um ID de evento específico for gerado

Eu tenho uma solução semelhante que gostaria de compartilhar, caso alguém possa colocá-la em uso, pois parece me ajudar e gritar comigo apenas quando eu explicitamente precisar, com base em informações específicasIDs de evento.

Agendamento

Esta solução utiliza umAgendador de tarefastrabalho que tem muitos diferentes GatilhosdoEm um eventopara quando for executar. Você especifica o específicoID do eventoisso é para "acionar"uma execução.

insira a descrição da imagem aqui insira a descrição da imagem aqui


Script do PowerShell

Aqui está umPowerShellscript que utiliza uma conta do Gmail com senha para enviar um e-mail que incluirá em seu corpo os detalhes dos eventos aplicáveis.

Observação: Você deve passar a senha da conta do Gmail como primeiro argumento para o script do 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

DeAçãoaba você criará umAçãodefinido como:

  • Ação: Start a program
  • Programa/roteiro: Powershell
  • Adicione argumentos (opcional): -ExecutionPolicy Bypass -File "C:\Scripts\PSScript.ps1" "GmailPassword"
  • Comece em (opcional): C:\Windows\System32\WindowsPowerShell\v1.0 insira a descrição da imagem aqui

DeEm geralguia da tarefa agendada, certifique-se de que aExecute se o usuário estiver conectado ou nãoe aExecute com privilégios mais altosambas as opções estão selecionadas.

insira a descrição da imagem aqui


O e-mail

Com tudo listado acima definido exatamente como especificado, isso garantirá que quando essesIDs de eventos do sistemasão gerados os que você definiu "gatilhos" para isso será enviado um e-mail, e esperançosamente com detalhes aplicáveis ​​de acordo com o evento que aciona cada um.

Menciono isso apenas porque notei que se dois eventos que correspondam ao PowerShelllógica de $event | format-list -property * | out-stringsão criados rapidamente, que o corpo do e-mail conterá os detalhes do evento mais recente com base no tempo.

Lembre-se que independentemente doID do eventoconteúdo do corpo e mesmo que não seja pertinente aos eventos específicos que você definiu como gatilhos, é certo que aqueles acionados definidos realmente acionaram este e-mail, portanto, preste atenção quando recebido.

insira a descrição da imagem aqui

informação relacionada