当我尝试安全地删除硬件时,Windows 10 告诉我某个程序正在使用该硬件,但没有告诉我它是哪个程序。我发现此信息在系统下的事件查看器中记录为事件 225,如下所示:
应用程序 \Device\HarddiskVolume3\Program Files... 的进程 ID 为 4424,已停止移除或弹出设备 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 帐户发送电子邮件,电子邮件正文中包含适用事件的详细信息。
笔记: 您必须将 Gmail 帐户密码作为第一个参数传递给 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
来自行动选项卡上你将创建一个行动定义为:
- 行动:
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正文内容,即使它与您定义为触发器的特定事件无关,但可以肯定的是,那些定义为触发的事件确实触发了这封电子邮件,因此在收到时请留意。