在Select-String -Context之后插入空格/分隔符

时间:2017-08-17 16:40:17

标签: powershell

我有一个脚本,它读取位于不同位置的一系列日志文件,并使用Select-String查找错误代码。在错误代码之后,我使用" -Context"将接下来的四行打印到文件中。该文件的内容将被转储到电子邮件中并发送出去。

$logsToCheck = "F:\Log1.log",
               "F:\log2.log",
               "F:\log3.log"
$logsToCheck | % {Select-String -Path $_  -Pattern "SQLCODE:2627" -Context 
0, 4} | Out-File $dupChkFile
$emailbody = Get-Content $dupChkFile | ConvertTo-Html

字符串的实际输出格式不正确并且一起运行。有没有办法在使用Select-String -Context?

时在最后一行之后添加空行或空格

最初我将$ emailbody管道输出到Out-String但是将其更改为HTML以尝试清除格式。

2 个答案:

答案 0 :(得分:1)

尝试分别读出匹配和上下文。

Select-String -Path $_ "SQLCODE:2627" -Context 0,2 | %{ 
    $_.Line
    $_.Context.PostContext
    "-----Separator-----"
}

Select-String的{​​{1}}的默认输出是人类可读修改的,这将返回所有未修改的字符串数组,因此您可以确定始终会有换行符,并且它会表现出来更好地使用其他cmdlt,包括Context或循环。

答案 1 :(得分:0)

我建议使用连接:

% { "$(Select-String -Path $_ -Pattern 'SQLCODE:2627' -Context 0, 4)`r`n" } |
  Out-File $dupChkFile -Append