1

我正在尝试编写一个 PowerShell 脚本,它将每 N 秒连续轮询一个性能计数器,然后将计数器返回的值相加。我的最终目标是将十几个计数器的结果汇总并运送到 Graphite 服务器进行监控和报告。

到目前为止,这是我为一个特定的柜台拼凑而成的,我只是不确定如何在 PowerShell 魔法巫术的土地上获得一些东西。

  1. 我不知道如何将作业 ID 获取为整数,因此我可以自动执行 while 循环。
  2. 仅返回来自 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。"\Network Interface(*)\" 有效,但给了我一切。

4

1 回答 1

1

关于#1,获取从Start-Job. 您可以稍后使用它来引用作业,例如:

$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
于 2012-08-11T05:22:36.500 回答