我正在尝试通过 powershell 在安全事件日志中找到最旧的保留事件。
使用以下命令:(Get-EventLog Security | Sort-Object -Property Time -Descending)
这将返回一个至少没有排序的列表。我在这里做错了什么?
我正在尝试通过 powershell 在安全事件日志中找到最旧的保留事件。
使用以下命令:(Get-EventLog Security | Sort-Object -Property Time -Descending)
这将返回一个至少没有排序的列表。我在这里做错了什么?
“时间”是为输出目的生成的字符串,而不是日期时间对象,因此发生的排序不是按时间顺序排列的,而是不存在的。
查看 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
属性
这不是 的问题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