You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell从TeamCity构建日志提取指定内容失败如何解决

问题根因

你写的两段正则返回空值的核心原因是:默认PowerShell使用的.NET正则引擎中,.元字符不匹配换行符,而你要提取的百分比表内容跨了多行,所以自然匹配不到结果。

修复后的完整实现代码

# 读取日志内容,-Raw参数会把整个日志读为单个字符串,不要省略该参数
$logContent = Get-Content "你的构建日志本地路径.log" -Raw

# 1. 提取Percentiles表格
$percentilesPattern = '(?<=Percentiles:\r?\n)(.*?)(?=\r?\n.*Request label stats:)'
$percentilesTable = [regex]::Match($logContent, $percentilesPattern, [Text.RegularExpressions.RegexOptions]::Singleline).Value.Trim()

# 2. 提取Request Label Stats表格
$labelStatsPattern = '(?<=Request label stats:\r?\n)(.*?)(?=\r?\n.*Ending data feeding)'
$labelStatsTable = [regex]::Match($logContent, $labelStatsPattern, [Text.RegularExpressions.RegexOptions]::Singleline).Value.Trim()

# 3. 提取Online Report Link在线报告链接
$linkPattern = '(?<=Online report link: )https?://\S+'
$onlineReportLink = [regex]::Match($logContent, $linkPattern).Value.Trim()

# 结果输出验证
Write-Host "===== Percentiles表格 ====="
$percentilesTable
Write-Host "`n===== Request Label Stats表格 ====="
$labelStatsTable
Write-Host "`n===== 在线报告链接 ====="
$onlineReportLink

关键修改说明

  • 新增了[Text.RegularExpressions.RegexOptions]::Singleline参数开启单行模式,开启后.可以匹配包括换行在内的所有字符,满足跨行匹配的需求。也可以直接在正则开头加(?s)内联修饰符实现相同效果,写法更简洁,示例:
    $percentilesPattern = '(?s)(?<=Percentiles:\r?\n)(.*?)(?=\r?\n.*Request label stats:)'
    $percentilesTable = [regex]::Match($logContent, $percentilesPattern).Value.Trim()
    
  • 正则中增加了\r?\n兼容Windows和Unix两种换行格式,避免不同系统生成的日志匹配失败
  • 非捕获组的边界匹配做了精度优化,避免提取到多余的日志前缀内容

内容的提问来源于stack exchange,提问作者born2Learn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:24:03