イベントにタスクを添付するときにメッセージにイベントの詳細を表示する

イベントにタスクを添付するときにメッセージにイベントの詳細を表示する

ハードウェアを安全に取り外そうとすると、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 フォーム ライブラリを使用してそのメッセージを表示します。

イベントビューアのこのイベントにタスクを添付するイベント 225 のインスタンスでコマンドを実行します。アクション画面で、「プログラムの開始」を選択し、powershell実行するプログラム/スクリプトを指定します。「引数の追加」ボックスに、PowerShell スクリプトを保存した場所に合わせて次の行を入力します。

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

変更はタスクの作成後すぐに有効になります。

答え2

特定のイベントIDが生成されたときに電子メール通知を送信する

同様の解決策を誰かが使えるように共有したいと思いました。それは私を助け、特定の状況に基づいて明示的に必要な場合にのみ私に叫ぶようです。イベントID

スケジュール

このソリューションでは、タスクスケジューラさまざまな トリガーイベントでいつ実行するかを指定します。イベントIDそれは「引き金「処刑。」

ここに画像の説明を入力してください ここに画像の説明を入力してください


PowerShell スクリプト

こちらはパワーシェルパスワード付きの 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 ここに画像の説明を入力してください

から一般的なスケジュールされたタスクのタブで、ユーザーがログオンしているかどうかに関係なく実行するそしてその最高権限で実行するオプションは両方とも選択されています。

ここに画像の説明を入力してください


Eメール

上記のすべてを指定されたとおりに設定すると、特定のシステムイベントID定義した「トリガー「そのためには、それぞれのトリガーとなるイベントに応じて、該当する詳細が記載された電子メールが送信されます。」

私がこれについて言及したのは、2つのイベントが一致する場合、 パワーシェルロジックが$event | format-list -property * | out-stringすぐに作成され、タイミングに基づいて最新のイベントの詳細が電子メールの本文に含まれるようになります。

覚えておいてくださいイベントID本文の内容は、トリガーとして定義した特定のイベントに関連していない場合でも、トリガーとして定義されたイベントが実際にこの電子メールをトリガーしたことは確実であるため、受信した場合は注意してください。

ここに画像の説明を入力してください

関連情報