如何使用PowerShell获取网卡上传速率的兆比特值?
解决PowerShell网卡发送字节转兆比特的问题
首先明确:你用的转换公式是对的——1 Mbps = 125000 字节/秒(因为1Mbps=1000000比特/秒 ÷8比特/字节=125000字节/秒)。问题大概率出在计数器路径的转义错误,或是未处理无效数据导致除法报错,以下是具体解决步骤:
1. 修正计数器路径并验证原始数据
原命令里的是输入转义错误,正确的计数器路径应该用\分隔,先执行以下命令确认能获取有效数据:
# 获取所有网卡的发送字节/秒数据,包含网卡名称 $counterResults = Get-Counter 'Netzwerkadapter(*)\Bytes gesendet/s' | Select-Object -ExpandProperty CounterSamples # 查看原始数据,排查是否有无效值(比如$null或非数值) $counterResults | Select-Object InstanceName, CookedValue
2. 过滤无效数据并转换为Mbps
部分虚拟网卡、未启用的网卡可能返回空值或非数值,直接除法会报错,先过滤再计算:
# 计算每个有效网卡的发送Mbps,保留两位小数 $sendMbps = $counterResults | Where-Object { $_.CookedValue -is [double] } | ForEach-Object { [PSCustomObject]@{ 网卡名称 = $_.InstanceName 每秒发送Mbps = [math]::Round($_.CookedValue / 125000, 2) } } # 输出格式化后的结果 $sendMbps
3. 单个网卡的简化命令
如果只需要特定网卡(比如名为"Ethernet"的网卡),直接指定实例名可避免数组处理问题:
# 获取指定网卡的发送Mbps并格式化 $targetAdapterMbps = (Get-Counter 'Netzwerkadapter(Ethernet)\Bytes gesendet/s').CounterSamples.CookedValue / 125000 [math]::Round($targetAdapterMbps, 2)
常见错误排查点
- 计数器路径错误:用
Get-Counter -ListSet Netzwerkadapter查看德语系统下网卡计数器的正确名称,确认拼写无误 - 无效数值:通过
Where-Object过滤掉非double类型的CookedValue即可解决除法报错 - 版本兼容:确保使用PowerShell 5.1及以上版本,旧版本数组操作语法可能存在差异
内容的提问来源于stack exchange,提问作者Sofa
相关产品推荐
相关产品推荐

