Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 当获取日期后的事件时,为什么Get-WinEvent比Get-EventLog慢?_Powershell - Fatal编程技术网

Powershell 当获取日期后的事件时,为什么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

在特定日期之后检索事件时,Get-WinEvent似乎比Get-EventLog慢:

$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,该命令执行得很好。将其转换为并行工作流要麻烦得多,但这是可行的。