如何缩小Get-WinEvent查询范围?匹配指定进程并返回最新记录
筛选特定进程的最新安全日志记录(PowerShell)
当然可以用Where-Object实现需求,下面是修改后的完整代码,直接就能用:
Get-WinEvent -FilterHashtable @{ LogName = 'Security' ID = 4688 } | Where-Object { $_.Properties[5].Value -like '*cmd.exe' } | Select-Object @{name='NewProcessName';expression={ $_.Properties[5].Value }}, TimeCreated | Sort-Object TimeCreated -Descending | Select-Object -First 1
关键步骤说明:
- 筛选目标进程:通过
Where-Object判断事件中的进程名(对应$_.Properties[5].Value)是否匹配cmd.exe。用-like '*cmd.exe'是模糊匹配,不管完整路径,只要文件名是cmd.exe就会被筛选;如果要精确匹配完整路径(比如C:\Windows\System32\cmd.exe),把条件改成-eq 'C:\Windows\System32\cmd.exe'即可。 - 提取最新记录:用
Sort-Object TimeCreated -Descending把事件按生成时间倒序排列,再通过Select-Object -First 1取排序后的第一条,就是最新的目标进程记录。 - 时间字段辅助:额外保留了
TimeCreated字段,方便你确认记录的生成时间,不需要的话可以从Select-Object中删掉这个字段。
注意事项:
- 读取Security日志需要管理员权限,记得右键PowerShell选择「以管理员身份运行」。
- 如果日志量过大,查询速度较慢,可以在
FilterHashtable里添加时间范围限制,比如StartTime = (Get-Date).AddDays(-7),只查询最近7天的日志。
内容的提问来源于stack exchange,提问作者Jibun no Kage
相关产品推荐
相关产品推荐

