将来自 Select 的上下文参数的值连接到行 属性 - 字符串输出

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

我正在尝试从单个目录中的多个文件编译日志错误。错误消息包含在两行的范围内。我想将这两行连接成一个 line/object,然后将所有错误导出到一个整洁的 csv 中。

我正在尝试使用 Select-String 实用程序和 -Context 参数来完成此操作。在通过 Select-Object 实用程序传输结果之前,一切都是 Kosher。但是,一旦我通过 Select-Object 或 Export-CSV 传输结果,-Context 行就会丢失。

$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

省略 Select-Object 和 Export-Csv Cmdlet 会产生所需的原始结果,并带有友好的右尖括号“>”(ASCII 62)。原始结果甚至可以通过 Out-File Cmdlet 导出,没问题。

但是,我想做的是将 Pattern 行与 Context 行结合起来,创建一个对象,最终将输出为 csv 文件以供进一步分析。

如果这个问题看起来微不足道,我想道歉。我已经搜索了资源试图解决这个问题,但不幸的是我没能做到。提前致谢!

管道 select-string 通过 fl * 以查看属性是什么。

$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 }

这对我有用:

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