Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.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-EVENTLOG';创建完整的对象列表,然后进行筛选?-有没有更快的办法?_Powershell_Cmdlet_Get Eventlog - Fatal编程技术网

Powershell ';GET-EVENTLOG';创建完整的对象列表,然后进行筛选?-有没有更快的办法?

Powershell ';GET-EVENTLOG';创建完整的对象列表,然后进行筛选?-有没有更快的办法?,powershell,cmdlet,get-eventlog,Powershell,Cmdlet,Get Eventlog,以下Powershell脚本仅获取今天发生的所有系统错误事件—它可以正常工作: Get-EventLog System -After ([datetime]::Today) | Where-Object { $_.EntryType -eq "Error" } 但运行可能需要几秒钟:我怀疑这是因为第一个'Get-EventLog'cmdlet首先生成所有事件的完整列表;然后,“Where-Object”cmdlet将整理该列表 是一种将“where object”筛选器作为参数传递给“Get

以下Powershell脚本仅获取今天发生的所有系统错误事件—它可以正常工作:

Get-EventLog System -After ([datetime]::Today) | Where-Object { $_.EntryType -eq "Error" }
但运行可能需要几秒钟:我怀疑这是因为第一个'Get-EventLog'cmdlet首先生成所有事件的完整列表;然后,“Where-Object”cmdlet将整理该列表

是一种将“where object”筛选器作为参数传递给“Get EventLog”的方法,以便在获取每个对象时对其进行测试

我推测这样的机制运行起来会更快,因为“Get EventLog”不必维护传递给后续“Where Object”的对象的完整列表

但我只是在猜

另外:这没什么大不了的——这只是我的一个兴趣点/理解点

Get-EventLog System -After ([datetime]::Today) -EntryType Error

是的,您可以在原始命令中指定此参数。

Oops:我在帮助中错过了这一点-是的-这工作得更快。(但我想,一般来说,您不能只是向任意cmdlet“传入”筛选器,而必须在对象管道的末尾加入它们。)(这似乎对性能有影响——特别是对于“选择对象优先1”来说)事实上——我不确定它是否更快(可能更多地是因为事件日志是一个动态变化的东西,需要被系统锁定等):但在任何情况下都更方便且更易于阅读。主要取决于函数的设计方式,这里它内置于命令中:SYNTAX Get EventLog[-LogName][-InstanceId][-After[]][-AsBaseObject][-Before[][-ComputerName[][-EntryType{Error | Information | FailureAudit| SuccessAudit | Warning}][-Index[]…过滤主要取决于我解析的内容和我需要的内容。如果我要处理大量对象(即:所有广告计算机或用户)或更小的对象(20台服务器的阵列)。第一个解决方案,我将尽量缩小我的初始搜索范围,第二个,我将尽量保持尽可能多的属性,以不受对象的限制。