get-winevent 输出到以二进制形式存储的文件

Posted

技术标签:

【中文标题】get-winevent 输出到以二进制形式存储的文件【英文标题】:get-winevent output to a file getting stored as binary 【发布时间】:2021-07-03 06:42:46 【问题描述】:

我正在使用 get-winevent 将 evtx 日志转换为 .json 文件。然后我把它寄给了ELK。 Get-WinEvent -Path .\log.evtx | ConvertTo-Json|Format-List | Out-File log.json 该文件看起来像一个包含 Windows 上的文件的普通字符串。但是当我把它带到linux时,它包含二进制数据,无法解析为ELK。

即使我使用 out-string,也没有任何变化。 $result = Get-WinEvent -Path .\user-creation-1log.evtx | ConvertTo-Json| Format-List $result | Out-String | out-file log.json这在 linux 中也看起来像一个二进制文件。 (虽然我记得export-csvget-winevent 创建了完整的文本文件,但这会产生一个非常难看的格式化csv 文件)。我真的很喜欢 convertTo-json 格式化和重视 json 数据的方式,并且更喜欢它。 (如果有人可以提供一种不同的方式将 evtx 数据以最完整的形式转换为 json,很高兴接受)。 我已经尝试过 evtx2csv python 模块,但它不会将输出写入文件。

【问题讨论】:

【参考方案1】:

首先,如果您打算导出 JSON,请不要使用 Format-List。这仅用于将对象格式化为控制台中的良好视觉表示。

另外,我不使用 Linux,但我想明确指定 utf8 作为编码以确保其兼容是最安全的:

Get-WinEvent -Path .\log.evtx | ConvertTo-Json | Out-File log.json -Encoding utf8

【讨论】:

完美解决,编码解决了。如果我再次遇到问题,我将测试将文件上传到 ELK 并再次更新。 @nav33n 这是在黑暗中拍摄的,但很高兴它对你有用。祝你好运。 另外,生成的 json 被分割成多行,由换行符分隔。有没有办法在一行中获取 JSON 日志? (多行 JSON 正在破坏 ELK 的解析)。生成的日志格式在此链接有问题***.com/questions/68238193/… @nav33n 您应该真正查看您正在使用的 cmdlet 的 documentation,或者使用 Get-Help。你会看到有一个-Compress 开关。

以上是关于get-winevent 输出到以二进制形式存储的文件的主要内容,如果未能解决你的问题,请参考以下文章

计算机数的内部存储过程(从输入到输出的流程)

java输入与输出

java语言将任意一个十进制数数字转换为二进制形式,并输出转换后的结果

常用格式化输出形式

java如何把一个以文本存储的文件转化为二进制文件

C++学习49 对二进制文件的读写操作