有没有办法在检索事件日志条目之前使用 PowerShell 过滤它们?
IE
代替:
[string[]]$IgnoredSources = 'SomeValue','SomeOtherValue'
Get-Eventlog -LogName $MyLog -ComputerName $MyComputer `
| ?{$IgnoredSources -notcontains $_.Source} `
| Sort-Object TimeGenerated -Descending `
| Select-Object -First 10
就像是:
Get-Eventlog -LogName $MyLog -ComputerName $MyComputer `
-Filter {(Source -ne 'SomeValue') -and (Source -ne 'SomeOtherValue')} `
-Newest 10
更多信息
我知道我可以添加一个where-object
语句来过滤拉回的结果;但这比在服务器端进行过滤效率低,这意味着诸如此类的命令在-Newest 100
过滤后不一定会返回 100 个结果(即,我必须拉回整个事件日志以确保获得最新的
我也知道,对于日期,这可以通过-After
and-Before
属性实现,并且可以提供-Username
's 和-Source
's 的列表来限制这些。但是,如果我想排除 1 个源,或过滤一系列事件 ID,目前似乎没有办法。
我已经研究过使用Get-WmiObject
而不是Get-EventLog
,但是虽然这允许在服务器端进行过滤,但我无法确定限制返回结果数量的方法(即在排序之前返回到我的机器,然后使用select-object
's-first
进行过滤下结果)。
Get-WmiObject Win32_NTLogEvent -ComputerName $MyComputer `
-filter "(logfile='$MyLog') and (sourcename != 'SomeValue') and (sourcename != 'SomeOtherValue') " `
| Sort-Object TimeGenerated -Descending `
| Select-Object -First 10