我正在尝试将.etl文件转换为.txt文件。现在,我使用以下命令从.txt文件中获取.etl文件:
Get-WinEvent -Path $Path -Oldest -ErrorAction SilentlyContinue -ErrorVariable errors | ForEach-Object { "{0},{1},{2},{3},{4}" -f $_.TimeCreated.ToString("yyyy-MM-ddTHH:mm:ss.ffffff"), $_.Id,$_.Level,$_.ProviderName,$_.Message } `
| Add-Content -Path $LogFilePath
然而,的.etl文件相当大,需要大约一个小时才能完成。
我想知道是否还有其他方法在txt文件中转换这些etl文件,而不需要太多开销。我试着查看tracerpt工具,但是它只将.etl文件转换为..csv/..xml文件。
发布于 2022-09-23 19:28:47
也许这不是你想要的答案,但我还是推荐你。
不幸的是,没有开箱即用的.NET方式来做这件事.
事件跟踪可能涉及到,但如果您找到它,您将获得更高的性能。
微软有几个关于如何使用.etl和本机API读取C++文件的示例。
看看这个:
https://learn.microsoft.com/en-us/windows/win32/etw/using-tdhformatproperty-to-consume-event-data
发布于 2022-07-29 20:10:31
.Net System.IO调用似乎比Get-Content
& Set-Content
快。直接将CSV转换为TXT的速度几乎是原来的两倍,并且应该适用于任何其他格式:
# $file1 is a 71,070 line CSV
$file1 = "C:\Users\Username\Desktop\_test.csv"
$file2 = "C:\Users\Username\Desktop\_test.txt"
#### Test 1 - Get-Content -Raw
$start1 = Get-Date
Get-Content $file1 -Raw | Set-Content $file2
$end1 = Get-Date
#### Test 2 - .NET's System.IO
$start2 = Get-Date
$txt = [System.IO.File]::ReadAllText("$file1")
[System.IO.File]::WriteAllText("$file2", $txt)
$end2 = Get-Date
New-TimeSpan –Start $Start1 –End $End1
New-TimeSpan –Start $Start2 –End $End2
# TotalMilliseconds : Attempt [1] 109.3493 [2] 93.7438 [3] 78.1255
# TotalMilliseconds : Attempt [1] 49.4906 [2] 46.8493 [3] 46.8738
在执行字符串操作(如修改时间和日期格式)时,.NET也更快,就像在示例中所做的那样。要获得更好的故障,请查看所有的Stack O question & answers here
https://stackoverflow.com/questions/73169541
复制相似问题