使用Powershell进程的网络使用

问题描述 投票:6回答:2

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

performance powershell powershell-v2.0
2个回答
0
投票

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

Scripting Guy - Get-Counter

诀窍是找到你需要的计数器,我不认为你可以获得你所追求的粒度,因为它们与PerfMon使用的计数器相同。它更关注整个网络接口,而不是使用接口的各个进程。话虽如此,如果它是使用给定接口的唯一东西,它应该很好地做到这一点。

查看可用于启动的网络接口选项:

(get-counter -list "Network Interface").paths

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的读数。

© www.soinside.com 2019 - 2024. All rights reserved.