使用PowerShell统计日志文件各会话块的failure出现次数
按会话块统计日志中"failure"出现次数的PowerShell解决方案
我来帮你调整脚本,实现按每个会话块单独统计"failure"的出现次数,同时还能解决原脚本里一行多个failure只算1次的小问题。
完整实现脚本
# 读取整个日志文件内容,保留换行结构 $logContent = Get-Content -Path E:\shell\lot.log -Raw # 按会话开头的标记分割日志,过滤掉空的分割块 $sessionBlocks = $logContent -split '^---Session \d+$', 0, 'Multiline' | Where-Object { $_ -match '\S' } # 遍历每个会话块进行统计 foreach ($block in $sessionBlocks) { # 提取会话名称(取块的第一行内容) $sessionName = ($block -split "`n")[0].Trim() # 统计当前会话块中"failure"的总出现次数 $failureCount = ($block | Select-String -Pattern 'failure' -AllMatches).Matches.Count # 输出统计结果 Write-Output "$sessionName : 共出现 $failureCount 次failure" }
脚本说明
- 读取日志内容:用
Get-Content -Raw一次性读取整个文件,这样能完整保留日志的换行和块结构,方便后续按会话分割。 - 分割会话块:通过正则表达式
^---Session \d+$匹配每个会话的开头行,Multiline参数让^能匹配每行的起始位置,分割后过滤掉空块避免无效遍历。 - 统计每个会话的failure:
- 先从会话块的第一行提取会话名称(比如Session 1);
- 用
Select-String -AllMatches找到块内所有的"failure"匹配项,通过Matches.Count得到准确的出现次数(解决了原脚本一行多failure只算1次的问题); - 最后输出每个会话的统计结果。
测试结果
针对你给出的日志示例,运行脚本后会输出:
Session 1 : 共出现 2 次failure
Session 2 : 共出现 1 次failure
Session 3 : 共出现 2 次failure
内容的提问来源于stack exchange,提问作者RaWneZ
相关产品推荐
相关产品推荐

