2

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

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

这将返回一个至少没有排序的列表。我在这里做错了什么?

4

2 回答 2

3

“时间”是为输出目的生成的字符串,而不是日期时间对象,因此发生的排序不是按时间顺序排列的,而是不存在的。

查看 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是在使用空值“工作”,因此缺乏可见的变化。

无论哪种方式,都使用 propertyTimeGenerated属性

于 2018-08-02T16:26:27.803 回答
3

这不是 的问题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
于 2018-08-02T16:34:57.593 回答