使用Powershell进程的网络使用

时间:2013-04-01 18:21:11

标签: performance powershell powershell-v2.0

我想计算特定进程发送和接收的字节数。我想使用powershell。 我可以使用资源监视器 - >网络活动做的事情。 我怎么能用get-counter做到这一点?

2 个答案:

答案 0 :(得分:0)

在这里有一篇关于使用Get-Counter cmdlet的非常好的Scripting Guy文章:

Scripting Guy - Get-Counter

诀窍将是找到你需要的计数器,我不认为你可以获得你所追求的粒度,因为它们与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的读数。