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
关键说明
正则表达式解析:
error \|:匹配日志行中error |的固定格式(需转义特殊字符|)(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}):捕获标准格式的时间戳,作为第一个分组- \[Task\].*Name::匹配- [Task]到Name:之间的任意内容(\w+):捕获由字母、数字、下划线组成的任务名称,作为第二个分组
结果存储:用
PSCustomObject将时间戳和任务名称配对存储,方便后续遍历、导出或进一步处理原脚本问题修复:
- 替换中文引号为英文引号,避免语法错误
- 新增正则匹配逻辑,实现精准提取而非仅筛选行
内容的提问来源于stack exchange,提问作者Aniket Chaudhuri
相关产品推荐
相关产品推荐

