我想计算特定进程发送和接收的字节数。我想使用powershell。 我可以使用资源监视器 - >网络活动做的事情。 我怎么能用get-counter做到这一点?
答案 0 :(得分:0)
在这里有一篇关于使用Get-Counter
cmdlet的非常好的Scripting Guy文章:
诀窍将是找到你需要的计数器,我不认为你可以获得你所追求的粒度,因为它们与PerfMon使用的计数器相同。它更关注整个网络接口,而不是使用接口的各个进程。话虽如此,如果它是使用给定接口的唯一的东西,它应该很好地做到这一点。
查看可用于开始的网络接口选项:
(get-counter -list "Network Interface").paths
答案 1 :(得分:0)
你似乎不能。我绝对无法找到性能监视器正在读取的计数器,但其他人可能会插入其中。除了get-counter之外,还有其他一些方法,但这就是你特别要求的。
查看计数器,您将找到最接近的事物是过程对象上的“IO读取字节数/秒”和“IO写入字节数/秒”计数器。
问题在于它们不仅仅是网络活动。 perfmon中的描述说:
“此计数器计算进程生成的所有I / O活动 包括文件,网络和设备I / O。“
话虽如此,如果你知道你想要监控的过程或主要写入网络连接,这可能比不测量任何东西更好。
你会这样做(我会以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的读数。