7

I want to calculate the bytes sent and recieved by a particular process .I want to use powershell for that. Something which I can do using Resource Monitor->Network Activity. How can i do that using get-counter?

4

2 回答 2

2

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

脚本专家 - Get-Counter

诀窍是找到您需要的计数器,我认为您无法获得所需的粒度,因为这些计数器与 PerfMon 使用的计数器相同。它更关注整个网络接口,而不是使用该接口的单个​​进程。话虽如此,如果它是唯一使用给定接口的东西,它应该可以很好地完成这个技巧。

先看一下可用的网络接口选项:

(get-counter -list "Network Interface").paths
于 2013-08-19T15:06:42.840 回答
1

你不能,看来。我绝对找不到性能监视器正在读取的计数器,尽管其他人可能会插话。可能还有其他方法而不是 get-counter ,但这是您特别要求的。

查看计数器,您会发现最接近的是进程对象上的“IO Read Bytes/sec”和“IO Write Bytes/sec”计数器。

这些问题的问题在于,它们不仅仅计算网络活动。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 的读数。

于 2017-07-27T17:27:47.690 回答