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

时间:2016-10-25 20:10:33

标签: windows powershell get-winevent

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

TimeCreated

以下是当前输出的示例:

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

2 个答案:

答案 0 :(得分:3)

“获取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')
  }}

答案 1 :(得分: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来记录该日志。

现在.. 安全性日志具有更高的精度,请尝试:

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