You need to enable JavaScript to run this app. 如何为现有PowerShell SMTP日志过滤脚本添加进度条
优惠活动
大模型
产品
解决方案
定价
更多

如何为现有PowerShell SMTP日志过滤脚本添加进度条

PowerShell SMTP日志分析脚本添加进度条实现方案

要给两段逻辑分别添加进度条,核心思路是提前获取待处理对象的总数量,再循环处理过程中实时计算进度并调用Write-Progress更新显示,具体实现如下:


第一阶段:日志解析逻辑添加进度条

首先提前读取日志文件获取总行数,避免流处理模式下无法计算进度百分比:

# 替换为实际SMTP日志文件路径
$logPath = "你的日志文件路径"
$logLines = Get-Content -Path $logPath
$totalLines = $logLines.Count
$currentLine = 0

$result = $logLines | ForEach-Object {
    $currentLine++
    # 每100行更新一次进度,避免大文件场景下频繁刷新拖慢性能,小文件可删除此判断
    if ($currentLine % 100 -eq 0 -or $currentLine -eq $totalLines) {
        $progressPercent = [math]::Round(($currentLine / $totalLines) * 100, 2)
        Write-Progress -Activity "正在解析SMTP日志条目" -Status "已处理 $currentLine / $totalLines 行,进度:$progressPercent%" -PercentComplete $progressPercent
    }

    if($_ -match '(\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}:\d{2}).*\(((?:\d{1,3}\.){3}\d{1,3})\) disconnected\.?\s+(\d+) message\[s\]'){
        try {
            $dns = [System.Net.Dns]::GetHostEntry($matches[2]).HostName
        }
        catch { 
            $dns = 'Not available' 
        }
        [PsCustomObject]@{
            IP       = $matches[2]
            Messages = [int]$matches[3]
            DNSName  = $dns
            Date     = [datetime]::ParseExact($matches[1], 'dd.MM.yyyy HH:mm:ss', $null)
        }
    }
}
# 关闭当前阶段进度条
Write-Progress -Activity "正在解析SMTP日志条目" -Completed

第二阶段:IP维度统计逻辑添加进度条

提前获取IP分组的总数量,处理每个分组时更新进度:

$ipGroups = $result | Group-Object -Property IP
$totalGroups = $ipGroups.Count
$currentGroup = 0

$cumulative = $ipGroups | ForEach-Object {
    $currentGroup++
    $progressPercent = [math]::Round(($currentGroup / $totalGroups) * 100, 2)
    Write-Progress -Activity "正在统计IP维度入站邮件总量" -Status "已处理 $currentGroup / $totalGroups 个IP,进度:$progressPercent%" -PercentComplete $progressPercent

    [PsCustomObject]@{
        IP = $_.Name
        Messages = ($_.Group | Measure-Object -Property Messages -Sum).Sum
        DNSName = $_.Group[0].DNSName
        Date    = ($_.Group | Sort-Object Date)[-1].Date
    }
}
# 关闭当前阶段进度条
Write-Progress -Activity "正在统计IP维度入站邮件总量" -Completed

补充说明

两段代码可以直接按顺序拼接执行,无需额外调整逻辑。如果处理的日志文件体积较小,可直接删除第一阶段的100行更新限制,每行处理后都刷新进度也不会有明显性能损耗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 09:54:07