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



我正在编写一个必须将事件导出到CSV文件的脚本。我想添加具有准确系统时间的行。我不知道的是如何提取TimeCreatedSystemTime性质。例如:

 TimeCreated 
   [SystemTime]  2016-10-25T20:04:47.824727500Z 

下面是当前输出的示例:

PS C:Usersuser> 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为他们工作。

你说的"get the SystemTime property"是什么意思?事件日志条目的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作为日志。

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

Get-WinEvent -LogName Security -MaxEvents 10 | Select-Object -Expand TimeCreated | ForEach-Object { $date = [DateTime]$_; $date.ToString("yyyy-MM-ddTHH:mm:ss.ffffff"); }

…你得到你想要的毫秒报告!

所以这是一个两部分的回答,因为你请求的日志(应用程序)不包含毫秒跟踪。

编辑:请注意,我没有做UTC时间转换,就像上面的Ansgar Weicher的回答一样。我留下的时间是当地时间。因此,从ToString格式化器中删除'Z'。

相关内容

  • 没有找到相关文章

最新更新