Я хочу сказать, что (я пингвин) я не Windows или парень из Powershell, но это не должно мешать мне помогать нашей команде Windows.
Мне нужно объединить два журнала исортировать их по дате и времени.Я думаю, что объединение их должно быть достаточно простым, но сортировка по дате и времени, кажется, немного сбивает меня с толку.
Журнал, с которым я работаю, не имеет одинакового количества столбцов и т.д.Я несколько нормализую журнал, чтобы попытаться отсортировать по logline [3,4], который является датой и временем.
"SMTPD" 4416 2476943 "2018-09-11 23:53:37.410" "1.1.1.1" "SENT: 221 goodbye"
"TCPIP" 4308 "2018-09-11 23:59:47.255" "TCP - 1.1.1.2 connected to 1.1.1.1:25."
"SMTPD" 4308 2476952 "2018-09-11 23:22:47.255" "1.1.1.1" "SENT: 220 mx9.bobdestroyer.com ESMTP"
"SMTPD" 4416 2476952 "2018-09-11 23:35:47.255" "1.2.3.4" "RECEIVED: EHLO smtp-cow-666"
"SMTPD" 4416 2476952 "2018-09-11 23:22:47.255" "1.1.1.1" "SENT: 250-mx5.bobthedestroyer.com[nl]250-SIZE 20480000[nl]250-AUTH LOGIN[nl]250 HELP"
"SMTPD" 4232 2476952 "2018-09-11 23:53:47.255" "1.1.1.1" "RECEIVED: MAIL FROM:<bobtheBuilder@builders.com>"
"SMTPD" 4232 2476952 "2018-09-11 23:59:47.255" "1.1.1.1" "SENT: 250 OK"
"SMTPD" 4416 2476952 "2018-09-11 23:11:47.270" "1.1.1.1" "RECEIVED: RCPT TO:<bobtheBuilder@builders.com>"
"SMTPD" 4416 2476952 "2018-09-11 23:22:47.270" "1.1.1.1" "SENT: 250 OK"
"SMTPD" 4308 2476952 "2018-09-11 23:55:47.270" "1.1.1.1" "RECEIVED: DATA"
"SMTPD" 4308 2476952 "2018-09-11 23:21:47.270" "1.1.1.1" "SENT: 354 OK, send."
"SMTPD" 4000 2476952 "2018-09-11 09:53:48.208" "1.1.1.1" "SENT: 250 Queued (0.768 seconds)"
"APPLICATION" 3100 "2018-09-11 11:53:48.208" "SMTPDeliverer - Message 2570349: Delivering message from bobtheBuilder@builders.com to bobtheDestroyers@Destroyerrs.com . File: C:\Program Files (x86)\servers\toomanysecrets\{49E08D79-C4A5-43F1-9435-9999999999}.eml"
"APPLICATION" 3100 "2018-09-11 12:12:48.208" "SMTPDeliverer - Message 2570349: Relaying to host bobtheBuilder@builders.com ."
Вот что я написал:
$Unclean_LogLines = Get-Content .\BHmailLog.txt
#$LogLines | %{"$($_.Split()[0,1,2,3,4,5,6,7,8,9,10,11,12,13 ])"}
$AppendedLogLines = [System.Collections.ArrayList]@()
#Attempts to normalise the log.... And even out the columns.So that I can grap $_[3,4] for each line.
#perhaps a simple foreach + regex would be better....
$Unclean_LogLines | foreach-object {
$firstcolumn = ($_ -split '\s+',4)[0]
if($firstcolumn -eq '"APPLICATION"'){
$_ = '"APPLICATION" ' + $_
$AppendedLogLines.Add($_ + "`n")
}
elseif($firstcolumn -eq '"TCPIP"'){
$_ = '"TCPIP" ' + $_
$AppendedLogLines.Add($_ + "`n") # minor problem here. I am not 100% normalising the log... I should make _$[2] = 4248 or something.
}
else{
$AppendedLogLines.Add($_ + "`n")
}
}
"FINISHED NORMALISING!! "
$AppendedLogLines| foreach-object {
$timestamp,$null = %{"$($_.Split()[3,4])"}
$timestamp = $timestamp.Replace('"','') # remove the last qoate....
$_ |sort-object -property {
}