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

How to get accurate event's systemtime via `Get-WinEvent` and DateCreated event's property?

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

"get the SystemTime property" 是什么意思?事件日志条目的 TimeCreated 字段包含 DateTime values, which don't have any such property. If you need the values in a particular format you can apply that format via a calculated property:

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"); }

...您可以根据需要报告毫秒数!

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

编辑:请注意,我没有像上面 Ansgar Weicher 的回答那样进行 UTC 时间转换。我将其保留为系统本地时间。因此,从 ToString 格式化程序中删除了 'Z'。