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

PowerShell解析日志文件并整理为列输出至CSV求助

非结构化IKE日志转结构化CSV解决方案

你的现有代码仅将日志每行直接导出为CSV的单个字段,未对日志的结构化信息做解析。要实现需求,需先按IKE Peer条目块分割日志,再逐一解析块内属性,最终生成结构化对象导出。

实现步骤

  1. 读取日志完整内容,按条目块分割(每个条目以数字开头,如1 IKE Peer:...)
  2. 遍历每个条目块,提取并解析其中所有属性键值对
  3. 将每个条目转换为PowerShell自定义对象
  4. 收集所有对象后导出为标准CSV

完整代码

# 读取日志文件完整内容
$logContent = Get-Content -Path "C:\Users\testuser\datatoparse.log" -Raw

# 按IKE Peer条目分割日志(匹配数字开头的条目起始行)
$logBlocks = $logContent -split '(?=\d+\s+IKE Peer:)' | Where-Object { $_ -match '\S' }

# 初始化结果存储数组
$results = @()

foreach ($block in $logBlocks) {
    # 有序哈希表存储当前条目的所有属性
    $props = [ordered]@{}

    # 解析条目编号、PeerIP和Peer名称
    if ($block -match '^(\d+)\s+IKE Peer:\s+([\d\.]+)\s+\(([^)]+)\)') {
        $props['EntryID'] = $matches[1]
        $props['PeerIP'] = $matches[2]
        $props['PeerName'] = $matches[3]
    }

    # 解析所有键值对格式的行(支持单行多键值,如Type : L2L  Role : initiator)
    $keyValueLines = $block -split "`n" | Where-Object { $_ -match '^\s*(\w[\w\s]+)\s*:\s*(\S+)' }
    foreach ($line in $keyValueLines) {
        if ($line -match '^\s*(\w[\w\s]+)\s*:\s*(\S+)') {
            # 清理键名(移除空格,避免CSV列名含空格)
            $key = $matches[1].Trim() -replace '\s+', ''
            $value = $matches[2].Trim()
            $props[$key] = $value
        }
    }

    # 将属性转为自定义对象并加入结果数组
    $results += [PSCustomObject]$props
}

# 导出为UTF8编码的CSV文件
$results | Export-Csv -Path "logfile.csv" -NoTypeInformation -Encoding UTF8

Pause

代码说明

  • 使用-Raw参数读取完整日志,便于按条目块分割
  • 正则表达式(?=\d+\s+IKE Peer:)实现正向预查分割,确保每个块是完整的IKE Peer条目
  • [ordered]@{}保证CSV列顺序与日志中属性出现顺序一致
  • 自动清理键名中的空格,避免CSV列名格式混乱
  • 兼容单行包含多个键值对的日志格式

输出CSV示例

导出的CSV会包含以下结构化列:EntryID, PeerIP, PeerName, Type, Role, Rekey, State, Encrypt, Hash, Auth, Lifetime, LifetimeRemaining,每个IKE Peer对应一行数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 07:53:28