I was bored…
New sample data
2020-06-04 15:06:53 [1255] INFO DisplayName=Emailaddress1@domain.com, ExAddress=, SmtpAddress=Emailaddress1@domain.com
2020-06-04 15:06:54 [1653] INFO DisplayName=Emailaddress1@domain.com, ExAddress=, SmtpAddress=Emailaddress1@domain.com
2020-06-04 15:06:56 [12651] INFO DisplayName=Emailaddress1@domain.com, ExAddress=, SmtpAddress=Emailaddress1@domain.com
2020-06-04 15:10:14 [8276] INFO DisplayName=Emailaddress2@domain.com, ExAddress=, SmtpAddress=Emailaddress2@domain.com
2020-06-04 15:11:01 [680] INFO DisplayName=Emailaddress3@domain.com, ExAddress=, SmtpAddress=Emailaddress3@domain.com
2020-06-04 15:16:58 [1340] INFO DisplayName=Emailaddress4@domain.com, ExAddress=, SmtpAddress=Emailaddress4@domain.com
2020-06-04 15:16:59 [11340] INFO DisplayName=Emailaddress5@domain.com, ExAddress=, SmtpAddress=Emailaddress5@domain.com
2020-06-04 15:16:57 [1308] INFO DisplayName=Emailaddress4@domain.com, ExAddress=, SmtpAddress=Emailaddress4@domain.com
2020-06-04 15:16:57 [19971] INFO DisplayName=Emailaddress5@domain.com, ExAddress=, SmtpAddress=Emailaddress5@domain.com
2020-06-04 11:08:01 [6800] INFO DisplayName=Emailaddress3@domain.com, ExAddress=, SmtpAddress=Emailaddress3@domain.com
2020-06-04 19:08:01 [6033] INFO DisplayName=Emailaddress3@domain.com, ExAddress=, SmtpAddress=Emailaddress3@domain.com
New script
$ImportedData = Import-Csv -Path D:\sample\sample.log -Delimiter ' ' -Header Date, Time, ID, Info, DisplayName, ExAddress, SmtpAddress |
Select-Object -Property @{
Name = 'DateTime'
Expression = { Get-Date ($_.Date, $_.Time -join ' ') -Format 'yyyy-MM-dd HH:mm:ss' }
}, ID, Info,
@{
Name = 'DisplayName'
Expression = { ($_.DisplayName -split '=')[1].trim(',') }
},
@{
Name = 'ExAddress'
Expression = { ($_.ExAddress -split '=')[1].trim(',') }
},
@{
Name = 'SmtpAddress'
Expression = { ($_.SmtpAddress -split '=')[1].trim(',') }
}
$lookup = $ImportedData | Group-Object -Property displayname -AsHashTable -AsString
$lookup.Keys | foreach {
$oldest = $lookup[$_].datetime | sort | select -First 1
$newest = $lookup[$_].datetime | sort | select -Last 1
$newestID = $lookup[$_] | ? datetime -eq $newest | select -ExpandProperty ID
$oldestID = $lookup[$_] | ? datetime -eq $oldest | select -ExpandProperty ID
[pscustomobject]@{
"First Occurrence" = "{0} {1}" -f $oldest,$oldestID
"Last Occurrence" = "{0} {1}" -f $newest,$newestID
Displayname = $_
Count = $lookup[$_].Count
}
} | sort -Property count -Descending
New output
First Occurrence Last Occurrence Displayname Count
---------------- --------------- ----------- -----
2020-06-04 11:08:01 [6800] 2020-06-04 19:08:01 [6033] Emailaddress3@domain.com 3
2020-06-04 15:06:53 [1255] 2020-06-04 15:06:56 [12651] Emailaddress1@domain.com 3
2020-06-04 15:16:57 [19971] 2020-06-04 15:16:59 [11340] Emailaddress5@domain.com 2
2020-06-04 15:16:57 [1308] 2020-06-04 15:16:58 [1340] Emailaddress4@domain.com 2
2020-06-04 15:10:14 [8276] 2020-06-04 15:10:14 [8276] Emailaddress2@domain.com 1