I try to parse a log file and output a formatted result.
The result file is created but it's empty after running the script.
Source log file:
2011-07-08 14:34:40.609 Ber 8 [R: 1] Http -> GET http://test.com:80/api/test?__crd=78F5WE6WE
2011-08-08 12:34:51.202 Inf 9 [R: 1] Http <~ GET http://TEST.com:80/api/gs?__crid=7B9790431B8 [304 Not Modified] [11.774 ms]
2011-08-08 15:38:52.166 War 8 [R: 33] [Excn][Type:Api][Err:300][HTTPStatus:NotFound][Message:PCNDLS_. ISE Account : 111][CorrId:hvukyhv78r5564]

Write-Host 'Hello! My Name is test !'
$Files = Get-ChildItem C:\log\1\* -Include *.log
New-Item -ItemType file -Path C:\log\result.txt –Force
foreach ($File in $Files)
{
$StringMatch = $null
$StringMatch = select-string $File -pattern "[Exception]|[304 Not Modified]"
if ($StringMatch) {out-file -filepath C:\log\result.txt -inputobject $StringMatch }
$regex = 'Line\s+(\d+):\s+([^;]+);([^;]+);([^;]+);(.+)'
[regex]::Matches($StringMatch, $regex) | ForEach-Object {
[PsCustomObject]@{
ID = $_.Groups[1].Value
Time = $_.Groups[2].Value
Status = $_.Groups[3].Value
URL = $_.Groups[4].Value
Message = $_.Groups[5].Value
}
}
}
"[Exception]|[304 Not Modified]"is a wrong regex to use because[]have special meaning, so they should be escaped:"\[Exception\]|\[304 Not Modified\]"And you overwrite the results in each iteration: might wanna use-Appendswitch... Anyway, debug the script in PowerShell ISE by setting a breakpoint and then step through the code, inspect the variables.305 not modifiedbut your code looks for304 not modified.foreach (){}doesn't output to the pipeline - you throw the output away. Your code looks for one line in the log, but your desired output needscrdinformation from the previous line, andHTTPStatusandMessagefrom the subsequent line, you will need to useSelect-String -Contextand read the .Context property of the MatchInfo objects it generates.