Какое время и в каком формате использовать, если вы хотите получить события из системного журнала за определенное время? Есть небольшой сюрприз…
Если воспользоваться оснасткой Event Viewer, то в ней есть возможность установить фильтр, в том числе можно задать диапазон времени – время локальное для текущей сессии:
В результате имеем такой фильтр:
Если открыть представление этого фильтра в формате XML, то мы увидим:
Как вы видите, время перекодировано и задано в определенном формате (SortableDateTimePattern) и, более того, это время приведено к UTC!
Мы можем скопировать этот запрос и использовать его в командлете Get—WinEvent с параметром FilterXML – в результате получим массив с теми же событиями, что и в оснастке Event Viewer.
Теперь становится очевидным, что если вы хотите динамически построить фильтр содержащий время, то необходимо привести время к UTC и отформатировать надлежащим образом.
Вот пример такого форматирования:
$Today = [System.DateTime]::Today.ToUniversalTime().ToString(«s»)
$Yesterday = [System.DateTime]::Today.AddDays(-1).ToUniversalTime().ToString(«s»)
Теперь эти переменные можно использовать для построения фильтра:
$query = @”
<QueryList>
<Query Id=»0″ Path=»Microsoft-Windows-PrintService/Operational»>
<Select Path=»Microsoft-Windows-PrintService/Operational»>*[System[TimeCreated[@SystemTime>=$Yesterday and @SystemTime<=$Today]]]</Select>
</Query>
</QueryList>
“@
Вызов командлета:
Get-WinEvent –FilterXML $query
Filed under: Powershell, Windows | Tagged: Event Log Filtering, Event Viewer, eventlog, Powershell, Windows |
[…] Powershell – системные журналы и особенности фильтров по… […]
[…] Powershell – системные журналы и особенности фильтров по… […]
[…] Powershell – системные журналы и особенности фильтров по… […]
[…] Powershell – системные журналы и особенности фильтров по… […]