我正在尝试编写一个PowerShell脚本,它将每N秒连续轮询一次性能计数器,然后对计数器返回的值求和。 我的最终目标是将十几个计数器的结果汇总并运送到Graphite服务器进行监控和报告。
到目前为止,这是我为一个特定的计数器拼凑而成的,我不知道如何在PowerShell魔法伏都教中获得一些东西。
仅从Receive-Job返回CounterSample数据,可以通过管道传递给Measure-Object获得总和。
Start-Job {Get-Counter -Counter "\Network Interface(MyNic)\Bytes Received/sec" -Continuous -SampleRate 1}
while ($true) {
start-sleep -s 10
Receive-Job -id N
}
我还想知道在PowerShell v1.0或v2.0中动态确定Windows框中活动NIC的简单有效方法。 " \网络接口(*)\"有效,但给了我一切。
答案 0 :(得分:1)
关于#1,抓住从Start-Job
返回的InstanceId。您可以稍后使用它来引用作业,例如:
$job = Start-Job ...
对于#2,最后添加一个额外的foreach,例如:
$job = start-job {Get-Counter -Counter "\Network Interface(Realtek PCIe GBE Family Controller)\Bytes Total/sec" -Continuous -SampleInterval 1 | Foreach {$_.CounterSamples}}
然后对数据进行求和:
Receive-Job $job | Measure CookedValue -Sum