У меня есть файл журнала от Cisco CUBE, который я пытаюсь проанализировать. (См. Пример ниже)
492447672: 23617598: Jan 3 2020 09:35:53.723 CST: //3589443/8FEADF5BB96C/SIP/Msg/ccsipDisplayMsg:
492447674: SIP/2.0 100 Trying
492447676: From: <sip:121212121212@11.22.33.44>;tag=3532003747967211_c1b08.2.4.1565675433978.0_13167287_41590160
492447677: To: <sip:8665095396@32.253.171.2>
492447678: Date: Fri, 03 Jan 2020 09:35:53 GMT
492447679: Call-ID: 6071103241340198@c1b08_2_4
492447732:
492447785: 23617598: Jan 3 2020 09:35:53.742 CST: //3589444/8F3ADF6BB96C/SIP/Msg/ccsipDisplayMsg:
492447787: SIP/2.0 200 OK
492447789: From: <sip:7274614191@55.66.77.88>;tag=F5F6B278-C41
492447790: To: <sip:3142093827@10.0.9.2>;tag=81980079~12263472-39ad-9427-486e-bf5a8d182fc5-45401032
492447791: Date: Fri, 03 Jan 2020 15:35:53 GMT
492447792: Call-ID: 6071103241340198@c1b08_2_4
492448015:
492448016: 23617598: Jan 3 2020 09:35:54.621 CST: //-1/xxxxxxxxxxxx/SIP/Msg/ccsipDisplayMsg:
492448018: BYE sip:000003142093802@99.88.77.66:5060;user=phone SIP/2.0
492448020: From: <sip:8007751000@22.33.44.55>;tag=7503241779906852_c2b07.2.1.1565675434828.0_13161968_41570935
492448021: To: <sip:8776030785@33.44.55.66>;tag=F5EC255A-6B1
492448022: Call-ID: 6071103241340198@c1b08_2_4
Идея состоит в том, чтобы идентифицировать вызовы, которые не генерировали статус «ОК». Я использую прилагаемый код для генерации хеш-таблицы всех записей вызовов. Для каждого callID имеется несколько записей. Это решение на самом деле не делает то, что я хочу: я хотел бы найти любые фрагменты журнала, которые не имеют строку " SIP / 2.0 200 OK " между строки " SIP / 2.0 100 Trying " и " BYE sip: " (выдержка ниже делает это) и извлечение CallID , To и С . Как бы я это сделал?
$logPath = "c:\temp\logfile.txt"
$csvPath = $logPath + ".csv"
$myArr = @()
$myArr = [IO.File]::ReadAllText($logPath) | Select-String -Pattern "\d+: \d{8}[\s\S]*?(?=\d+:\s\d{8})|($)" -AllMatches | % { $_.Matches } | % { $_.Value }
$results = @()
foreach ($item in $myArr) {
$result = [PSCustomObject]@{
# CallRef = Select-String -InputObject $item -Pattern "(?<=\d+: )\d{8}(?=.*\r)" | % {$item.Matches} | % {$item.Value}
CallID = Select-String -InputObject $item -Pattern "(?<=\d+: Call-ID: ).*?(?=\r)" | % { $_.Matches } | % { $_.Value }
Date = Select-String -InputObject $item -Pattern "(?<=\d+: \d{8}: ).*CST(?=:.*\r)" | % { $_.Matches } | % { $_.Value }
Status = Select-String -InputObject $item -Pattern "(?<=\d+: SIP/2.0 \d+ ).*?(?=\r)|(?<=\d+: )BYE(?= sip:.*?\r)" | % { $_.Matches } | % { $_.Value }
To = Select-String -InputObject $item -Pattern "(?<=\d+: To: ).*?(?=\r)" | % { $_.Matches } | % { $_.Value }
From = Select-String -InputObject $item -Pattern "(?<=\d+: From: ).*?(?=\r)" | % { $_.Matches } | % { $_.Value }
}
if ($result.Status -ne $null -and $result.status -ne "OK") {
$results += $result
}
}
$results | Export-Csv -NoTypeInformation $csvPath