Powershell 3.0 提高powershell脚本的性能

Powershell 3.0 提高powershell脚本的性能,powershell-3.0,Powershell 3.0,我正试图从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.

我正试图从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 
24秒,使用REST发送同一批500个事件。这个查询可以做些什么来提高性能吗


我在一些博客中读到,当它在32位运行时,
invokeWebRequest
会得到更好的结果。尚未对此进行测试。

我们能够解决此问题。任何面临类似问题的人都应该考虑用C#而不是powershell编写

我们编写了一个自定义dll,它将获取evt/evtx文件,并将它们转换为我们的平台可以理解的格式。我们使用自定义dll作为powershell脚本的一部分来循环evt/evtx文件


我们取得的成绩是100+每股收益。我们从Powershell获得的初始EPS约为18 EPS,使用多线程可以实现80 EPS。

请注意,您可能认为80 EPS是一个不错的数字,但在Powershell中尝试多线程时,我们遇到了一些内存泄漏问题。