0

我正在编写一个必须将事件导出到 CSV 文件的脚本。我想添加具有准确系统时间的行。我不明白的是如何提取SystemTime. 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,它似乎不适-ExcludeProperty用于它们。

4

2 回答 2

3

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

Get-WinEvent -LogName Application -MaxEvents 10 |
  Select-Object @{n='TimeCreated';e={
    $_.TimeCreated.ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ss.ffffffZ')
  }}
于 2016-10-25T20:56:32.680 回答
2

对此答案的一个警告:

特定事件日志(应用程序)不记录部分秒数。即:您总是会000000.几秒钟后收到。因此,您的精确时间需要有效地是单数秒。

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

此外,如果您(手动)查看事件日志,您会发现它们在 Application logs 上也没有提供任何更精确的条目的确切时间。他们似乎只是依赖 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”。

于 2016-10-25T21:01:03.160 回答