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

PowerShell脚本无法提取日志中动态任务名称与指定时间戳问题

日志提取:任务名称与时间戳获取方案

需求说明

需要从指定日志文件中提取两类信息:

  • error标识后的时间戳(如2022-09-02 02:13:05)
  • 动态任务名称(如OPT_VIM_1HEAD、OPT_VIM_1ITEM)

原脚本仅筛选含error的行,未实现精准提取,以下是修正后的解决方案:

修正后的PowerShell脚本

$dir = 'C:\ProgramData\AecorsoftDataIntegrator\logs\'
# 获取目标日志文件(最新的2022-09-02.log)
$fileList = (Get-ChildItem -Path $dir -Filter '2022-09-02.log' | Sort-Object LastWriteTime -Descending | Select-Object -First 1).FullName

# 定义正则表达式:捕获error后的时间戳和任务名称
$regexPattern = 'error \| (\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) - \[Task\].*Name:(\w+)'

# 存储提取结果的数组
$extractedData = @()

# 逐行处理日志内容
Get-Content -Path $fileList | ForEach-Object {
    $match = $_ | Select-String -Pattern $regexPattern
    if ($match.Success) {
        $timestamp = $match.Matches.Groups[1].Value
        $taskName = $match.Matches.Groups[2].Value
        # 将结果存入数组,可按需调整存储方式
        $extractedData += [PSCustomObject]@{
            Timestamp = $timestamp
            TaskName  = $taskName
        }
    }
}

# 输出提取结果
$extractedData

关键说明

  1. 正则表达式解析:

    • error \|:匹配日志行中error |的固定格式(需转义特殊字符|)
    • (\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}):捕获标准格式的时间戳,作为第一个分组
    • - \[Task\].*Name::匹配 - [Task]到Name:之间的任意内容
    • (\w+):捕获由字母、数字、下划线组成的任务名称,作为第二个分组
  2. 结果存储:用PSCustomObject将时间戳和任务名称配对存储,方便后续遍历、导出或进一步处理

  3. 原脚本问题修复:

    • 替换中文引号为英文引号,避免语法错误
    • 新增正则匹配逻辑,实现精准提取而非仅筛选行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:11:07