Powershell 当获取日期后的事件时,为什么Get-WinEvent比Get-EventLog慢?
在特定日期之后检索事件时,Get-WinEvent似乎比Get-EventLog慢:Powershell 当获取日期后的事件时,为什么Get-WinEvent比Get-EventLog慢?,powershell,Powershell,在特定日期之后检索事件时,Get-WinEvent似乎比Get-EventLog慢: $SourceComputer = "MyServer" $LogName = "Security" $StartDate = (get-date).AddMinutes(-30) $hashquery = @{logname=$LogName; StartTime=$StartDate} (Measure-Command -Expression {Get-WinEvent -ComputerName $Sou
$SourceComputer = "MyServer"
$LogName = "Security"
$StartDate = (get-date).AddMinutes(-30)
$hashquery = @{logname=$LogName; StartTime=$StartDate}
(Measure-Command -Expression {Get-WinEvent -ComputerName $SourceComputer -FilterHashTable $hashquery}).TotalSeconds
(Measure-Command -Expression {Get-EventLog -Computer $SourceComputer -LogName $Logname -After $StartDate}).TotalSeconds
输出:
Get-WinEvent: 128.8475308
Get-EventLog: 4.5299092
这似乎有些奇怪,因为Get-WinEvent应该比旧的Get-EventLog函数性能更好。我做错什么了吗?据了解,Get EventLog
在用于远程主机时似乎要慢得多
…Get WinEvent应该比老年人表现更好
获取事件日志
对于大多数参数,这是正确的Get-WinEvent
比Get-EventLog
更快,因为Get-EventLog
获取整个事件日志,然后进行本地筛选
然而,Get WinEvent
确实有一些警告,第一个是-FilterHashtable
,它有一个
第二个问题是,根据Ansgar Wiechers引用的文章底部的说法,
-FilterHashtable
非常慢。建议使用-FilterXML
Yep。。这正是我所期待的,但事实并非如此。无论是在本地运行还是在远程服务器上运行,我都会得到相同的行为。无论是使用哈希表、XML还是不使用过滤器,我都会得到非常相似的结果。查询安全事件日志比查询我尝试过的任何其他日志慢约30倍-即使在PS4中(没有在ver.5上尝试过),由于给定时间范围内的事件数量,对“安全”事件日志的查询通常较慢。使用推荐的安全设置,“安全”日志中的捕获量比“系统”、“应用程序”或“设置”日志中的捕获量多一个数量级。在我所做的测试中,不同日志的大小相当。此外,查询时间与大小成一定比例。但是当查询安全事件日志时,查询时间要长30倍。我发现Get WinEvent只是查询远程计算机的速度很慢。在我的脚本中,我使用PSRemoting/Invoke命令在每台计算机上本地运行getwinevent,该命令执行得很好。将其转换为并行工作流要麻烦得多,但这是可行的。