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 .ps1
arquivo 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 powershell
a 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.
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
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.
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-string
sã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.