0

有没有办法在检索事件日志条目之前使用 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 个结果(即,我必须拉回整个事件日志以确保获得最新的

我也知道,对于日期,这可以通过-Afterand-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
4

1 回答 1

2

Get-WinEvent怎么样?像这样的东西:

Get-WinEvent -ComputerName $MyComputer -MaxEvents 100 -FilterHashtable @{
    LogName=$MyLog;
    ID=$MyID;
    <# etc. #>
}
于 2016-02-24T14:03:30.993 回答