Назад | Перейти на главную страницу

Командлет PowerShell Get-WinEvent: фильтрация по метке времени не дает желаемых результатов?

Я пытаюсь отфильтровать события с помощью Get-WinEvent, чтобы получить определенные журналы за последние 24 часа:

$EventLogFilter = @{logname='ForwardedEvents'; id=4771,4625,4768; StartTime=(Get-Date).AddHours(-24)}
$LogonEvents = Get-WinEvent -FilterHashtable $EventLogFilter

Проблема в том, что Get-WinEvent возвращает только 14 событий, но есть тысячи, которые соответствуют этому критерию.

Пример:

$EventLogFilter = @{logname='ForwardedEvents'; id=4771,4625,4768; StartTime=(Get-Date).AddHours(-24)}
$LogonEvents = (Get-WinEvent -FilterHashtable $EventLogFilter) 
$LogonEvents.count
14

Теперь, если я удалю фильтр StartTime из Get-WinEvent и отфильтрую с помощью where-object, вы увидите, сколько из этих событий на самом деле существует:

$EventLogFilter = @{logname='ForwardedEvents'; id=4771,4625,4768}
$LogonEvents = (Get-WinEvent -FilterHashtable $EventLogFilter)
($LogonEvents | ?{$_.TimeCreated -ge (Get-Date).Addhours(-24)}).count
19497

Таким образом, он пропустил почти 20 000 журналов событий! Что, черт возьми, творится, неужели Get-WinEvent не работает? Есть ли ограничение на количество журналов, которые этот cmldet может отфильтровать, прежде чем он сойдет с ума и даст ненадежные результаты?

Кто-то дал мне ответ на другом форуме - на помощь приходит FilterXML.

Следующее дало мне именно то, что я хотел, с дополнительным удобством, позволив графическому интерфейсу создать запрос для меня:

$FilterXML = '<QueryList>
  <Query Id="0" Path="ForwardedEvents">
    <Select Path="ForwardedEvents">*[System[(EventID=4771 or EventID=4625 or EventID=4768) and TimeCreated[timediff(@SystemTime) &lt;= 86400000]]]</Select>
  </Query>
</QueryList>'
$LogonEvents = Get-WinEvent -FilterXml $FilterXML
$LogonEvents | sort -Property TimeCreated | Select-Object -First 1

Выполняя ($ LogonEvents | sort -Property TimeCreated | Select-Object -First 1), я смог подтвердить, что самый старый журнал был создан ровно 24 часа назад.

Надо было больше копаться в документации, потому что я не знал о -filterxml. Думаю, с этого момента я буду им пользоваться.