當我嘗試安全刪除硬體時,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 窗體庫來顯示其訊息。
使用事件檢視器將任務附加到此事件powershell
對事件 225 的執行個體執行指令。在「新增參數」方塊中,輸入以下行,並根據儲存 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正文內容,即使它與您定義為觸發器的特定事件無關,但可以肯定的是,那些定義的觸發事件確實觸發了此電子郵件,因此在收到時請給予一些注意。