我正在编写一个必须将事件导出到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
似乎不适合他们。
答案 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”。