可通过PowerShell的Get-Counter实时采集网卡“Bytes Sent/sec”并计算平均值,需正确指定计数器路径、过滤活跃物理网卡、排除虚拟设备,并用Group-Object分组求均值。
可以通过 powershell 调用性能计数器(get-counter)实时采集网卡的“bytes sent/sec”指标,再计算指定时间窗口内的平均值。关键在于选择正确的计数器路径、处理多网卡场景,并避免采样偏差。
确认可用的网卡性能计数器实例
Windows 中每个启用的网络适配器在 \Network Interface(*)\Bytes Sent/sec 下对应一个独立实例。先运行以下命令查看当前活跃的网卡名称:
或直接列出所有实例名:
Get-Counter "\Network Interface(*)\Bytes Sent/sec" -ErrorAction SilentlyContinue | ForEach-Object {$_.CounterSamples} | Select-Object InstanceName, CookedValue | Where-Object {$_.CookedValue -gt 0}采集固定时长内的每秒发送字节数并求均值
使用 Get-Counter 的 -SampleInterval 和 -MaxSamples 参数控制采样节奏。例如:采集 30 秒,每秒取一次样:
- 执行
Get-Counter "\Network Interface(*)\Bytes Sent/sec" -SampleInterval 1 -MaxSamples 30 - 对每个网卡实例,提取所有
CookedValue(单位为字节/秒),再取平均值 - 结果按网卡名分组汇总,排除未活动的实例(长期为 0)
完整脚本示例:
$samples.CounterSamples | Group-Object InstanceName | ForEach-Object {
$avg = ($_.Group.CookedValue | Measure-Object -Average).Average
if ($avg -gt 0) {
[PSCustomObject]@{Interface = $_.Name; "Avg Bytes Sent/sec" = [math]::Round($avg, 2)}
}
}
只统计指定网卡或排除虚拟/未连接设备
生产环境中常需过滤掉 Hyper-V、Docker、禁用或无链路的适配器。可结合 Get-NetAdapter 判断状态:
- 用
Get-NetAdapter | Where-Object {$_.Status -eq 'Up' -and $_.MediaType -notmatch 'Virtual'}获取物理且已连接的网卡名 - 将这些名字拼入计数器路径,如
"\Network Interface($name)\Bytes Sent/sec" - 避免通配符采集大量无效实例,提升准确性和性能
输出为表格、导出 CSV 或持续监控
默认输出是对象流,适合进一步处理:
- 加
| Format-Table -AutoSize可读性更好 - 加
| Export-Csv -Path "netstats.csv" -NoTypeInformation存档分析 - 若需持续滚动显示,可用
while($true){...; Start-Sleep -Seconds 5}包裹,但注意避免高频采样影响系统
不复杂但容易忽略实例名中的空格和特殊字符,建议统一用引号包裹计数器路径,采集前先验证单次样本是否有效。


















