이벤트에 작업을 첨부할 때 메시지에 이벤트 세부정보 표시

이벤트에 작업을 첨부할 때 메시지에 이벤트 세부정보 표시

하드웨어를 안전하게 제거하려고 하면 Windows 10에서는 프로그램이 하드웨어를 사용하고 있다고 알려주지만 어떤 프로그램인지는 알려주지 않습니다. 그러나 이 정보는 이벤트 뷰어의 시스템 아래 이벤트 225에 다음과 같이 기록되어 있는 것으로 나타났습니다.

프로세스 ID가 4424인 \Device\HarddiskVolume3\Program Files... 애플리케이션이 USB 장치에 대한 제거 또는 꺼내기를 중지했습니다....

매번 이벤트 뷰어에 가지 않고도 보고 싶은 꽤 유용한 정보네요. 이벤트 뷰어에 이 이벤트에 작업 연결...이라는 버튼이 있는 것을 발견했습니다. 이 버튼을 누르면 이 이벤트가 기록될 때마다 메시지를 표시하는 옵션이 제공됩니다. 이벤트 225가 기록될 때마다 작업에서 이벤트 세부 정보를 표시하도록 하고 싶습니다. 가능할 것 같지만 저는 시스템 수준의 전문가는 아닙니다.

목표를 달성하는 쉬운 방법이 있나요? 표시 메시지에 없으면 대신 실행할 배치 파일을 스크립트하여 이 정보를 알려주는 방법이 있습니까?

답변1

"메시지 표시" 작업은 더 이상 사용되지 않으며 실제로 아무 작업도 수행하지 않을 수 있습니다. 대신 PowerShell을 사용할 수 있습니다! 이것을 .ps1컴퓨터 어딘가에 파일로 저장하십시오. 예 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')

이 스크립트는 시스템 로그에서 이벤트 225의 최신 인스턴스를 가져오고 Windows Forms 라이브러리를 사용하여 해당 메시지를 표시합니다.

이벤트 뷰어 사용이 이벤트에 작업 연결이벤트 225 인스턴스에 대한 명령입니다. 작업 화면에서 "프로그램 시작"을 선택한 다음 powershell실행할 프로그램/스크립트를 지정합니다. "인수 추가" 상자에 PowerShell 스크립트를 저장한 위치에 맞게 조정된 다음 줄을 입력합니다.

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

변경 사항은 작업을 생성한 후 즉시 적용되어야 합니다.

답변2

특정 이벤트 ID가 생성되면 이메일 알림 보내기

누군가가 그것을 사용할 수 있는 경우를 대비해 공유하고 싶은 유사한 솔루션이 있습니다. 특정 기반에 따라 명시적으로 필요할 때만 나를 도와주고 비명을 지르는 것처럼 보이기 때문입니다.이벤트 ID.

스케줄링

이 솔루션은작업 스케줄러다양한 직업을 가지고 있는 직업 트리거~의이벤트 중실행될 때를 위해. 당신은 특정을 지정이벤트 ID그건 "방아쇠" 처형.

여기에 이미지 설명을 입력하세요 여기에 이미지 설명을 입력하세요


파워셸 스크립트

여기파워셸본문에 해당 이벤트의 세부정보가 포함된 이메일을 보내기 위해 비밀번호와 함께 Gmail 계정을 사용하는 스크립트입니다.

메모: PowerShell 스크립트의 첫 번째 인수로 Gmail 계정 비밀번호를 전달해야 합니다.

$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

로부터행동탭을 만들 것입니다행동로써 정의 된:

  • 행동: Start a program
  • 프로그램/스크립트: Powershell
  • 인수 추가(선택 사항): -ExecutionPolicy Bypass -File "C:\Scripts\PSScript.ps1" "GmailPassword"
  • 시작 위치(선택 사항): C:\Windows\System32\WindowsPowerShell\v1.0 여기에 이미지 설명을 입력하세요

로부터일반적인예약된 작업 탭에서사용자가 로그온했는지 여부에 관계없이 실행그리고가장 높은 권한으로 실행옵션이 모두 선택되었습니다.

여기에 이미지 설명을 입력하세요


이메일

위에 나열된 모든 항목을 지정된 대로 설정하면 특정 항목이시스템 이벤트 ID"트리거"에 대한 이메일이 전송될 것이며, 각각을 트리거하는 이벤트에 따라 적용 가능한 세부 정보가 포함되기를 바랍니다.

나는 이것에 대해서만 언급하는데, 이는 일치하는 두 가지 이벤트가 있는 경우 파워셸$event | format-list -property * | out-string이메일 본문에 타이밍에 따라 최신 이벤트의 세부정보가 포함된다는 논리가 빠르게 생성됩니다.

상관없이 기억하세요.이벤트 ID본문 내용 및 트리거로 정의한 특정 이벤트와 관련이 없더라도 정의된 트리거가 실제로 이 이메일을 트리거했음이 확실하므로 수신 시 주의를 기울이십시오.

여기에 이미지 설명을 입력하세요

관련 정보