Попытка отформатировать тики как дату и время экспорта - PullRequest
0 голосов
/ 12 января 2019

Я немного борюсь с проблемой, надеюсь, вы мне поможете.

Я использую get-winevent, чтобы получить определенные события с компьютера и экспортировать результаты в CSV.

Я устанавливаю переменную для хранения всех возвращенных событий, а затем использую цикл foreach, чтобы пройти по всем событиям и экспортировать их в CSV-файл. Когда я экспортирую созданный по времени объект, данные форматируются как дата и время, и я могу сортировать самые старые и самые новые или самые новые и самые старые. Я сталкиваюсь с тем, что формат по умолчанию «timecreated» - «MM / DD / YYYY чч: мм». Это вызывает проблему в том, что, если я не вижу секунд и миллисекунд, многие из этих событий происходят одновременно.

Чтобы решить эту проблему, я использовал следующее для форматирования даты:

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

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

Это хорошо работает, когда я просто вывожу на экран, дата отображается точно так, как я хочу. Однако, поскольку переменная является строкой, когда я экспортирую переменную в Excel, я не могу сортировать по времени.

Кто-нибудь знает способ преобразования тиков в формат отображения, который я хочу, но сохранить его как дату-время, а не строку? Или какой-нибудь способ получить созданный во времени объект и отформатировать его так, как я хочу, без необходимости преобразовывать его в строку?

Я начинаю думать, что мне, возможно, придется создать PSObject и обработать его таким образом, но я не уверен, что смогу сделать это даже тогда.

Спасибо за чтение.

1 Ответ

0 голосов
/ 13 января 2019

если я понимаю весь ваш запрос и ожидаемый результат.

Я проверил то, что вы ищете, и привел его к тому, что нам не нужно добавлять «fff» в формат строковой даты в Excel, потому что это не работает.

Попробуйте это:

$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

Ресурсы: Как представить DateTime в Excel

метки времени выдачи панд to_excel с микросекундами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...