Дата разбора Powershell из журнала - PullRequest
0 голосов
/ 11 декабря 2018

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

$SBError = "DbConnection"
$SBWebPath = "E:\Temp\server.log"

$result = Get-Content $SBWebPath | Select-String $SBError -casesensitive | Select -last 1 | Out-String
$result | Select-String '####<(\S+ \S+, \S+ \S+ \S+) \S+>' | ForEach-Object {
    $DBdateTime = $_.Matches[0].Groups[1].Value -as [DateTime]
    }
Write-Output $result
Write-Output $DBdateTime

server.log содержимое файла:

####<Dec 9, 2018 2:59:08,082 AM EST> <Info> <HTTP> Data flowing fine.
####<Dec 9, 2018 2:59:08,085 AM EST> <Warning> <HTTP> framework.db.DbConnection.

Вывод из сценария:

####<Dec 9, 2018 2:59:08,085 AM EST> <Warning> <HTTP> framework.db.DbConnection.

Переменная от $ DBdateTime не заполняется, я подозреваю, из-за неправильного или неправильного синтаксического анализа и / или включения миллисекунд в дату журнала.

Меня не волнуют миллисекунды, только месяц, месяц, год, минуты, минуты и метка AM / PM.Также не волнует EST, но следует помнить, что при изменении сервера на EDT это значение будет существовать вместо EST.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 11 декабря 2018

Вы получаете пустое значение для $DBDateTime, потому что PowerShell не распознает значение вашей захваченной группы как допустимое DateTime, поэтому строка не может быть приведена к этому типу.Вы должны фактически разобрать его.

$culture = [Globalization.CultureInfo]::InvariantCulture
$pattern = 'MMM d, yyyy h:mm:ss,fff tt'

$DBDateTime = [DateTime]::ParseExact($_.Matches[0].Groups[1].Value, $pattern, $culture)

См. здесь и здесь для правильных строк формата.

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