MrShakur
MrShakur

Reputation: 35

Joining value from Context parameter to Line property from Select-String output

I'm trying to compile log errors from multiple files in a single directory. The error messages are included over the span of two lines. I would like to concatenate both lines into a single line/object and then export all errors into a a neat csv.

I'm attempting to accomplish this with the Select-String utility, and the -Context parameter. Prior to piping the results through the Select-Object utility, everything's Kosher. However, Once I pipe the results through Select-Object or Export-CSV, the -Context line is lost.

$trigger = 'ERROR'
$folderPath = 'C:\Users\test\Desktop\testpath'
$logFiles = gci -Path $folderPath -Filter *.txt -File
$logFiles | Select-String -Pattern $trigger -CaseSensitive -SimpleMatch -Context 0,1 | Select-Object LineNumber, Line, Filename | 
Export-Csv -Path .\$(Get-Date -Format yyyymmddhhmmss).csv -Encoding UTF8 -NoTypeInformation

Omitting the Select-Object and Export-Csv Cmdlets yields the desired, raw, results with the friendly right angle bracket '>' (ASCII 62). The raw results can even be exported via the Out-File Cmdlet, no problem.

However, what I would like to do, is combine the Pattern line with the Context line, creating a single object, which would eventually be output as a csv for further analysis.

I would like apologize if this question seems trivial. I've scoured resources trying to figure this out and unfortunately haven't been able to. Thanks in advance!

Upvotes: 1

Views: 729

Answers (1)

js2010
js2010

Reputation: 27443

Pipe select-string through fl * to see what the properties are.

$a = ls log | select-string error -context 0,1                                                                                           
$a | fl *

IgnoreCase : True
LineNumber : 2
Line       : error
Filename   : log
Path       : /Users/js/log
Pattern    : error
Context    : Microsoft.PowerShell.Commands.MatchInfoContext
Matches    : {0}

$a.context       

PreContext PostContext DisplayPreContext DisplayPostContext
---------- ----------- ----------------- ------------------
{}         {after }    {}                {after }

This worked for me:

ls log | select-string error -context 0,1 | select linenumber, line,          
  @{n='PostContext'; e={$_.context.postcontext}}, filename

LineNumber Line  PostContext Filename
---------- ----  ----------- --------
         2 error after       log

Upvotes: 0

Related Questions