在 powershell 中获取/列出过去 n 分钟内的所有 Windows 事件日志事件

Jon*_*Jon 4 windows powershell event-log

遇到错误或问题后,我想快速查看过去几分钟的事件,看看是否有任何有用的信息。问题是,我不知道哪个特定日志可能包含我正在查找的事件,所以我只想显示所有这些事件。我想使用 powershell,因为打开事件查看器和创建过滤器需要很长时间,而且将命令复制并粘贴到 powershell 中的速度越快,我需要筛选的事件就越少。我不想记录事件发生的确切时间,只是一个相对时间。

例如,我知道如何从单个Windows 事件日志中获取最近 n 分钟的事件,Get-EventLog -LogName System -After (Get-Date).AddMinutes(-10) | Format-Table -AutoSize -Wrap但正如文档所述:

-LogName
指定一个事件日志的名称。要查找日志名称,请使用 Get-EventLog -List。不允许使用通配符。此参数是必需的。

所以我的想法是我可以迭代所有日志名称,EventLog在每个日志名称上运行并连接结果。

Jon*_*Jon 6

这是一个快速命令,它将迭代每个日志并显示过去十分钟内发生的所有事件(按发生时间排序):

Get-EventLog -List `
| %{Get-EventLog -LogName $_.Log -After (Get-Date).AddMinutes(-10) -ErrorAction Ignore} `
| Sort-Object TimeGenerated | Format-Table -AutoSize -Wrap
Run Code Online (Sandbox Code Playgroud)

或者在一行中做同样的事情:

Get-EventLog -List | %{Get-EventLog -LogName $_.Log -After (Get-Date).AddMinutes(-10) -ErrorAction Ignore} | Sort-Object TimeGenerated | Format-Table -AutoSize -Wrap
Run Code Online (Sandbox Code Playgroud)

Get-EventLog使用已弃用的 Win32 API。结果可能不准确。请改用 Get-WinEvent cmdlet。

获取胜利事件:

推荐的方法 - 它适用于 Microsoft PowerShell 和 Windows Powershell (>=v6),并且使用 FilterHashtable 比上述方法快得多。

Get-WinEvent -FilterHashtable @{LogName='*';StartTime=(Get-Date).AddMinutes(-10)} | Sort-Object TimeCreated
Run Code Online (Sandbox Code Playgroud)