我想计算特定进程发送和接收的字节数。我想为此使用 powershell。
我可以使用资源监视器-> 网络事件来做一些事情。
我如何使用 get-counter 做到这一点?
最佳答案
你不能,看来。我绝对找不到性能监视器正在读取的计数器,尽管其他人可能会插话。可能还有其他方法而不是 get-counter ,但这是您特别要求的。
查看计数器,您会发现最接近的是进程对象上的“IO Read Bytes/sec”和“IO Write Bytes/sec”计数器。
这些问题的问题在于,它们不仅仅计算网络事件。 perfmon 中的描述说:
"This counter counts all I/O activity generated by the process to include file, network and device I/Os."
话虽如此,如果您知道您只想监控或主要写入网络连接的进程,这可能比根本不测量任何东西要好。
你会这样做(我将使用 Chrome 作为示例,因为它现在可以方便地运行和使用数据):
get-counter "\Process(chrome*)\IO Read Bytes/sec"
这只会给你一次性阅读。如果您想继续阅读,可以添加连续开关。
返回的 PerformanceCounterSampleSet 对象并不完全适合使用,但您可以在 $obj.countersamples.cookedvalue 中找到实际读数。
该列表将相当长(如果您像我一样浏览)。 Chrome 在许多单独的进程中运行,因此我们将做一些数学运算以将它们全部加起来,并以 KB 显示。
最后结果:
get-counter "\Process(chrome*)\IO Read Bytes/sec" -Continuous | foreach {
[math]::round((($_.countersamples.cookedvalue | measure -sum).sum / 1KB), 2)
}
运行它只会持续输出 Chrome 正在使用多少 KB/s 的读数。
关于performance - 使用 Powershell 的进程的网络使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15749139/