我正在尝试从evtx文件中获取存档事件列表,并在修改格式后使用REST发布数据。
以下是我在Windows 7 x64系统上获得的结果:
Measure-Command {Get-WinEvent -ea SilentlyContinue -path "C:\evtx\arindam_security_1.evtx" -Oldest -MaxEvents 500|select *,@{ Name="Event Data"; Expression={([xml]$_.ToXml()).Event.EventData.Data }} }
TotalSeconds : 2.3954976
TotalMilliseconds : 2395.4976
我有什么方法可以改进吗?
我已经尝试过使用filterhashtable,它花了大约5秒 - 几乎是最后一次结果的两倍。
当我使用REST发布数据时:
Measure-Command {Invoke-WebRequest -Uri https://[ip:port]/events -Body $content -Method Post -ContentType "application/json" -ErrorAction SilentlyContinue}
PS C:\Windows\system32> C:\Users\sarindam\Documents\testrest.ps1
Days : 0
Hours : 0
Minutes : 0
Seconds : 24
Milliseconds : 365
Ticks : 243658910
TotalDays : 0.000282012627314815
TotalHours : 0.00676830305555556
TotalMinutes : 0.406098183333333
TotalSeconds : 24.365891
TotalMilliseconds : 24365.891
使用REST发送同一批500个事件的24秒。可以使用此查询完成任何操作以提高性能吗?
我在一些博客中读到Invoke-WebRequest
在32位运行时会得到更好的结果。 Haven尚未对此进行测试。
答案 0 :(得分:0)
我们能够解决这个问题。任何面临类似问题的人都应该考虑用C#而不是powershell编写它。
我们编写了一个自定义dll,它将获取evt / evtx文件并将其转换为我们的平台可以理解的格式。我们使用自定义dll作为powershell脚本的一部分来循环遍历evt / evtx文件。
我们取得的成绩是100+ EPS。我们从Powershell获得的初始EPS约为18 EPS,多线程我们可以达到80 EPS左右。