我有一个错误日志,我想使用 Powershell 过滤掉所有已知错误。我知道如何在 powershell 中按行过滤,但我的问题是错误日志中的错误跨越多行,但它们总是以日期时间开头。例如:
2016-01-14 01:01:01 Error 1: blab blab blab
blab blab blab line 1
blab blab blab line 2
blab blab blab line 3
2016-01-14 02:33:04 Error 2: blab blab blab
blab blab blab line 1
blab blab blab line 2
2016-01-14 02:33:04 Error 3: blab blab blab
blab blab blab line 1
我想过滤掉错误 1 和错误 3,因此输出将只有:
2016-01-14 02:33:04 Error 2: blab blab blab
blab blab blab line 1
blab blab blab line 2
是否有某种方法可以轻松地按日期时间分组并使用 powershell 进行过滤?
提前致谢!
答案1
您可以使用类似这样的方法。这可用于过滤多行中的特定错误,在此示例中为“错误 1”。之后,您可以再次运行并过滤掉“错误 3”。
$content = Get-Content -Path 'C:\Temp\test.log'
# Search all the errors
$errorLines = ($content | Select-String 'Error').LineNumber
foreach ($errorLine in $errorLines) {
$someError = $content[$errorLine-1]
# Known error to 'filter' out
if ( $someError -like '*Error 1*') {
# Search for line number of next error
[int]$errorLineNext = ($content[($errorLine)..$content.Count] | Select-String 'Error' | Select-Object -First 1).LineNumber
# No next errors found? Then use the total line number
if ( $errorLineNext -eq 0 ) { $errorLineNext = ($content.Count+1) - $errorLine }
$content.RemoveRange($errorLine-1, $errorLineNext)
}
}
$content | Set-Content -Path 'C:\Temp\test.log'