提高 powershell 脚本的性能
Improving performance in a powershell script
我正在尝试从 evtx 文件中获取存档事件列表,并在修改格式后使用 REST post 数据。
这是我在 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 post 数据时:
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
24 秒使用 REST 发送同一批 500 个事件。这个查询可以做些什么来提高性能吗?
我在一些博客中读到 Invoke-WebRequest
在 32 位上运行时提供更好的结果。还没有测试过。
我们能够解决这个问题。任何遇到类似问题的人都应该考虑用 C# 而不是 powershell 来编写它。
我们编写了一个自定义 dll,它将获取 evt/evtx 文件并将它们转换为我们的平台可以理解的格式。我们使用自定义 dll 作为 powershell 脚本的一部分来循环遍历 evt/evtx 个文件。
我们取得的业绩是 100+ EPS。我们从 Powershell 获得的初始 EPS 约为 18 EPS,使用多线程后我们可以达到 80 EPS 左右。
我正在尝试从 evtx 文件中获取存档事件列表,并在修改格式后使用 REST post 数据。
这是我在 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 post 数据时:
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
24 秒使用 REST 发送同一批 500 个事件。这个查询可以做些什么来提高性能吗?
我在一些博客中读到 Invoke-WebRequest
在 32 位上运行时提供更好的结果。还没有测试过。
我们能够解决这个问题。任何遇到类似问题的人都应该考虑用 C# 而不是 powershell 来编写它。
我们编写了一个自定义 dll,它将获取 evt/evtx 文件并将它们转换为我们的平台可以理解的格式。我们使用自定义 dll 作为 powershell 脚本的一部分来循环遍历 evt/evtx 个文件。
我们取得的业绩是 100+ EPS。我们从 Powershell 获得的初始 EPS 约为 18 EPS,使用多线程后我们可以达到 80 EPS 左右。