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
свойство вместо