Sort-Object, не влияющий на Get-EventLog

Я пытаюсь найти самое старое сохраненное событие в журнале событий безопасности через powershell.

Используя следующую команду: (Get-EventLog Security | Sort-Object -Property Time -Descending)

Это возвращает список, который не отсортирован ни в малейшей степени. Что я здесь не так делаю?

2 ответа

Решение

Это не проблема с Get-EventLog, но вызвано тем, что на выходе Get-EventLog не имеет Porperty Time,

использование Get-Member показать список доступных свойств.

Get-EventLog | Get-Member

Вы увидите, что есть TimeGenerated собственность, которую вы можете использовать.

Get-EventLog Security | Sort-Object -Property TimeGenerated -Descending

Кроме того, я хотел бы добавить, что это порядок по умолчанию в любом случае. Но если вы хотите изменить порядок, я рекомендую использовать Get-WinEvent вместо этого, который имеет -Oldest переключатель.

Get-WinEvent -LogName Security -Oldest

"Time" - это сгенерированная строка для целей вывода, а не объект datetime, поэтому сортировка, которая происходит, не является хронологической, но не существует.

Глядя на DotNetTypes.format.ps1xml, вы увидите, что он использует отформатированную версию TimeGenerated имущество.

<TableColumnHeader>
    <Label>Time</Label>
    <Width>13</Width>
</TableColumnHeader>
...
...
<PropertyName>TimeGenerated</PropertyName>
<FormatString>{0:MMM} {0:dd} {0:HH}:{0:mm}</FormatString>

Это сделано для того, чтобы иметь более дружественный вывод по умолчанию с предупреждением о проблемах, подобных той, которая у вас возникла.

Так, sort-object "работал" с нулевым значением, отсюда и отсутствие видимых изменений.

В любом случае используйте свойство TimeGenerated свойство вместо

Другие вопросы по тегам