如何无需解析evtx文件获取指定时间后事件日志的完整扩展描述?
解决方案
你需要的事件日志扩展描述无需解析.evtx文件即可获取,Get-WinEvent -ListLog返回的EventLogConfiguration对象本身就内置了Description属性,直接读取即可,该属性存储了系统注册的对应事件日志的完整官方说明文本。
如果需要进一步获取该日志关联的事件发布者的元数据说明,也可以搭配Get-WinEvent -ListProvider命令读取,全程不需要访问evtx原始文件内容。
修改后的代码如下:
$StartTime = (Get-Date).AddMinutes(-5) $rawdata = Get-WinEvent -ListLog * $eventlogs = @{} foreach ($record in $rawdata) { if ($record.LastWriteTime -gt $StartTime) { # 读取日志自带的扩展描述 $logExtensionDesc = $record.Description # 可选:读取关联事件提供者的描述信息 $providerExtensionDesc = $null if (-not [string]::IsNullOrWhiteSpace($record.OwningProviderName)) { $providerMeta = Get-WinEvent -ListProvider $record.OwningProviderName -ErrorAction SilentlyContinue $providerExtensionDesc = $providerMeta?.Description } $eventlogs[$record.GetHashCode()] = @{ 'LogType' = $record.LogType 'Name' = $record.LogName 'Provider' = $record.OwningProviderName 'LogExtensionDescription' = $logExtensionDesc 'ProviderExtensionDescription' = $providerExtensionDesc 'Path' = $record.LogFilePath 'Mode' = $record.LogMode 'Time' = $record.LastWriteTime } } }
补充说明
LogExtensionDescription字段就是你需要的事件日志完整扩展描述,数据从系统事件日志配置库直接读取,没有读取evtx文件的事件内容- 如果你需要更细粒度的事件ID对应的模板说明,可遍历
$providerMeta.Events属性获取每个事件ID的预置描述,同样不需要解析evtx文件 - 部分第三方或者系统内置日志没有注册扩展描述,对应字段返回空属于正常情况
内容的提问来源于stack exchange,提问作者Dario Corrada
相关产品推荐
相关产品推荐

