排序对象对 Get-EventLog 没有影响

Sort-Object having no effect on Get-EventLog

我正在尝试通过 powershell 在安全事件日志中查找最旧的保留事件。

使用以下命令:(Get-EventLog Security | Sort-Object -Property Time -Descending)

这个returns 一个没有排序的列表。 我在这里做错了什么?

"Time" 是出于输出目的生成的 string 而不是日期时间对象,因此发生的排序不是按时间顺序排列的,而是不存在的。

查看 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 是 "working",具有空值,因此没有可见的变化。

两种方式都使用 属性 TimeGenerated 属性 代替

这不是 Get-EventLog 的问题,而是由于 Get-EventLog 的输出没有属性 Time

使用 Get-Member 显示可用属性列表。

Get-EventLog | Get-Member

你会看到,有一个 TimeGenerated 属性,你可以使用它。

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

此外,我想补充一点,这是默认顺序。但是如果你想切换顺序,我建议改用 Get-WinEvent,它有一个 -Oldest 开关。

Get-WinEvent -LogName Security -Oldest