尝试将刻度设置为日期时间,然后导出为ex​​cel

时间:2019-01-12 00:07:55

标签: powershell date datetime

我在一个问题上苦苦挣扎,希望您能帮助我。

我正在使用get-winevent从计算机中捕获特定事件,并将结果导出到csv。

我正在设置一个变量来保存所有返回的事件,然后使用一个foreach循环单步执行所有事件并将其导出到csv文件。 当我导出创建时间的对象时,数据将格式化为日期时间,并且可以按从最早到最新的顺序或从最新到最早的顺序进行排序。我遇到的是“ timecreated”的默认格式是“ MM / DD / YYYY hh:mm”。这会导致一个问题,除非我能看到几秒钟和几毫秒,否则很多这些事件似乎是同时发生的。

为解决此问题,我一直在使用以下格式设置日期:

$ticks = [datetime]$event.timecreated.Ticks

$date = $ticks.Tostring("MM/dd/yyyy hh:mm:ss:fff")

当我刚输出到屏幕时,此方法效果很好,日期显示与我想要的完全一样。但是,由于变量是字符串,因此当我将变量导出到excel时,无法根据时间进行排序。

有人知道如何将刻度线转换为我想要的显示格式,但将其保留为日期时间而不是字符串吗?还是有任何方法可以抓住时间创建的对象并将其格式化为所需的形式,而不必将其转换为字符串?

我开始认为我可能必须创建一个PSObject并以这种方式处理它,但是我不确定即使那样我也可以做到。

感谢阅读。

1 个答案:

答案 0 :(得分:0)

如果我了解您的整个查询和排除的结果。

我已经测试了您要查找的内容,并得到了结果,我们不必在excel上将“ fff”添加到字符串日期格式,因为它不起作用。

尝试一下:

$ticks = [datetime]$event.timecreated.Ticks

$date = $ticks.Tostring("MM/dd/yyyy hh:mm:ss")

我们用于测试的完整示例:

$events =Get-WinEvent -ListLog * | Where {$_.IsClassicLog -eq ‘True’}

$events  | Select-Object LogMode, RecordCount, LogName, @{n="DateWrite";e={$_.LastWriteTime.ToString("dd/MM/yyyy hh:mm:ss")}} | Export-Csv -Path c:\fso\event_tester.csv -Encoding ascii -NoTypeInformation

结果具有排除的“日期”列:

enter image description here

资源: How to represent a DateTime in Excel

pandas output timestamps to_excel with microseconds