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

如何用Windows PowerShell按30秒间隔提取LISTEN/ESTABLISHED数据并导出Excel

按30秒间隔统计LISTEN/ESTABLISHED连接数并导出Excel

一、最优解决方案:结构化统计并导出

直接用PowerShell循环抓取统计,记录时间戳和两种状态的数量,导出的CSV可直接用Excel打开,步骤如下:

  1. 运行以下PowerShell脚本(按需修改循环次数,比如把10改成你需要的统计次数,或者换成while($true)实现无限统计):
$results = @()

# 这里设置统计10次,每30秒一次
for ($i=1; $i -le 10; $i++) {
    $currentTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    # 抓取所有连接并过滤目标状态
    $connList = netstat -na | Select-String 'LISTENING|ESTABLISHED'
    # 分别统计数量
    $listenNum = ($connList | Where-Object { $_ -match 'LISTENING' }).Count
    $estabNum = ($connList | Where-Object { $_ -match 'ESTABLISHED' }).Count
    # 组装成结构化数据
    $statObj = [PSCustomObject]@{
        时间戳 = $currentTime
        LISTENING连接数 = $listenNum
        ESTABLISHED连接数 = $estabNum
    }
    $results += $statObj
    # 最后一次循环不用等
    if ($i -lt 10) {
        Start-Sleep -Seconds 30
    }
}

# 导出到CSV,路径自己改
$results | Export-Csv -Path "C:\你的路径\ConnectionStats.csv" -Encoding UTF8 -NoTypeInformation
  1. 用Excel打开生成的CSV文件,直接就能用来做图表。如果需要原生xlsx格式,先安装ImportExcel模块(运行Install-Module -Name ImportExcel,需要管理员权限),然后把最后一行导出命令换成:
$results | Export-Excel -Path "C:\你的路径\ConnectionStats.xlsx" -AutoSize -BoldTopRow

二、针对你原有命令的优化

如果非要用netstat -na 30的持续输出,想过滤掉无关内容并实时统计数量,用这个命令:

netstat -na 30 | Select-String 'LISTENING|ESTABLISHED' | ForEach-Object {
    # 拆分行内容,提取最后一列的状态
    $status = ($_ -split '\s+')[-1]
    $status
} | Group-Object | ForEach-Object {
    Write-Host "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - $($_.Name): $($_.Count)"
}

不过这种方式只是实时打印统计结果,要导出成可用于图表的结构化数据,还是推荐第一种脚本方案。

三、为什么不用原来的start-transcript?

start-transcript会记录PowerShell的所有输出内容,包括命令执行的提示信息,导致日志里有大量无关内容,不如直接抓取并结构化数据高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:27:17