如何通过 `Get-WinEvent` 和 Date Created 事件属性获取准确的事件系统时间?
Posted
技术标签:
【中文标题】如何通过 `Get-WinEvent` 和 Date Created 事件属性获取准确的事件系统时间?【英文标题】:How to get accurate event's systemtime via `Get-WinEvent` and DateCreated event's property? 【发布时间】:2016-10-25 20:10:32 【问题描述】:我正在编写一个必须将事件导出到 CSV 文件的脚本。我想添加具有准确系统时间的行。我不明白的是如何提取TimeCreated
的SystemTime
属性。 IE。这个:
TimeCreated
[SystemTime] 2016-10-25T20:04:47.824727500Z
这是当前输出的示例:
PS C:\Users\user> Get-WinEvent -LogName Application -MaxEvents 10 | Select-Object TimeCreated
TimeCreated
-----------
25.10.2016 23:04:47
25.10.2016 23:04:47
25.10.2016 23:04:17
25.10.2016 23:04:17
25.10.2016 23:04:17
25.10.2016 23:04:17
25.10.2016 23:04:16
25.10.2016 23:04:16
25.10.2016 23:04:16
25.10.2016 23:00:15
更新
我可以添加-ExpandProperty TimeCreated
,但这会导致添加额外的列,例如Day, DayOfWeek, DayOfYear, Hour, Kind, Milliseconds, Minute, Month, Second, Ticks, TimeOfDay
,而且-ExcludeProperty
似乎不适用于它们。
【问题讨论】:
【参考方案1】:“获取SystemTime
属性”是什么意思?事件日志条目的TimeCreated
字段包含DateTime
值,它们没有任何此类属性。如果您需要特定 format 中的值,您可以通过 calculated property 应用该格式:
Get-WinEvent -LogName Application -MaxEvents 10 |
Select-Object @n='TimeCreated';e=
$_.TimeCreated.ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ss.ffffffZ')
【讨论】:
当我在 Application Log 上扩展他对 精确时间(我假设是毫秒)的要求时,你打败了我,我觉得不可行。不过答案很好。SystemTime
我的意思是我可以在事件查看器中看到的属性以及我可以通过 Xpath 搜索获得的属性。【参考方案2】:
对此答案的一个警告:
此特定事件日志(应用程序)不记录部分秒数。即:您总是会在.
几秒钟后收到000000
。因此,您的精确时间需要有效地是单数秒。
Get-WinEvent -LogName Application -MaxEvents 10 | Select-Object -Expand TimeCreated | ForEach-Object
$date = [DateTime]$_
$date.ToString("yyyy-MM-ddTHH:mm:ss.ffffff")
此外,如果您查看事件日志(手动),您会发现它们在应用程序日志上没有提供任何更精确的准确时间条目要么。他们似乎只依赖 HH:MM:SS 记录该日志。
现在.. Security 日志,例如,具有更高的精度,所以尝试:
Get-WinEvent -LogName Security -MaxEvents 10 | Select-Object -Expand TimeCreated | ForEach-Object $date = [DateTime]$_; $date.ToString("yyyy-MM-ddTHH:mm:ss.ffffff");
...你会得到你想要的毫秒报告!
所以这是一个两部分的答案,因为您请求的日志(应用程序)不包含跟踪的毫秒数。
编辑:请注意,我没有像上面 Ansgar Weicher 的回答那样进行 UTC 时间转换。我将其保留为系统本地时间。因此,从ToString
格式化程序中删除了“Z”。
【讨论】:
以上是关于如何通过 `Get-WinEvent` 和 Date Created 事件属性获取准确的事件系统时间?的主要内容,如果未能解决你的问题,请参考以下文章
如何获取与 0x1 或 0x4 匹配的 Powershell > Get-WinEvent > Security > Message > Access Mask