如何用PowerShell 5+解析TXT日志表格并排查FAILED项
使用PowerShell解析日志文件中的FAILED列数据
核心脚本实现
下面是针对需求编写的PowerShell脚本,适用于PowerShell 5及以上版本:
# 遍历指定目录下的所有.txt日志文件 Get-ChildItem -Path "C:\Your\Log\Directory" -Filter "*.txt" -File | ForEach-Object { # 读取文件全部内容 $content = Get-Content -Path $_.FullName -Raw # 匹配日志末尾的目标表格区域 $tableMatch = [regex]::Match($content, '(?s) Total Copied Skipped Mismatch FAILED Extras.*?Bytes :.*?$') if ($tableMatch.Success) { # 提取表格中的数据行(Dirs/Files/Bytes开头的行) $tableLines = $tableMatch.Value -split "`n" | Where-Object { $_ -match '^( Dirs |Files |Bytes )' } foreach ($line in $tableLines) { # 按空白字符拆分每行,提取对应列数据 $parts = $line -split '\s+' | Where-Object { $_ } $category = $parts[0].TrimEnd(':') $failedCount = $parts[5] # 输出解析结果 Write-Host "文件: $($_.Name) | 分类: $category | FAILED数量: $failedCount" } } else { Write-Warning "文件 $($_.Name) 未找到目标表格" } }
脚本关键部分说明
- 文件遍历:
Get-ChildItem指定日志目录,筛选.txt格式文件。 - 表格定位:用正则表达式匹配从表头到
Bytes行的完整表格,(?s)确保正则能跨换行匹配内容。 - 数据提取:拆分表格内容后,仅保留有效数据行;再按空白拆分每行,第6个元素(索引5)即为
FAILED列的数值。 - 结果反馈:正常解析的文件输出对应数据,未找到表格的文件输出警告提示。
自定义调整提示
- 将
-Path参数值替换为你的日志文件实际存储目录。 - 若日志表格格式有细微变动,可调整正则表达式中的表头匹配字符串,保证能准确定位目标表格区域。
内容的提问来源于stack exchange,提问作者Tim Shegrud
相关产品推荐
相关产品推荐

