繁体   English   中英

如何通过Get-WinEvent和DateCreated事件的属性获取精确的事件的系统时间?

[英]How to get precise event's systemtime via `Get-WinEvent` and DateCreated event's property?

我正在编写一个脚本,该脚本必须将事件导出到CSV文件。 我想添加具有精确系统时间的行。 我没有得到的是如何提取TimeCreatedSystemTime属性。 即这个:

 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似乎并不适合它们。

“获取SystemTime属性”是什么意思? 事件日志条目的TimeCreated字段包含DateTime值,该值没有任何此类属性。 如果您需要特定格式的值,则可以通过计算属性来应用该格式:

Get-WinEvent -LogName Application -MaxEvents 10 |
  Select-Object @{n='TimeCreated';e={
    $_.TimeCreated.ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ss.ffffffZ')
  }}

请注意此答案:

特定事件日志(应用程序)未记录部分秒数。 即:您总是会在之后收到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来获取该日志。

现在,例如, 安全日志具有更高的精度,因此请尝试:

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”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM