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

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

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

我知道如何从单身的例如,过去 n 分钟的 Windows 事件日志Get-EventLog -LogName System -After (Get-Date).AddMinutes(-10) | Format-Table -AutoSize -Wrap,但作为文档说:

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

所以我的想法是,我可以遍历所有日志名称,EventLog对每个日志名称运行并连接结果。

答案1

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

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

或者在一行中执行相同的操作:

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

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

获取 WinEvent:

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

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

相关内容