遇到错误或问题后,我想快速查看过去几分钟的事件,看看是否有任何有用的信息。问题是,我不知道哪个特定的日志可能有我正在寻找的事件,所以我想显示所有事件。我想使用 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