Measure-Object -суммировать все counterSamples из непрерывного get-counter

Я пытаюсь написать сценарий PowerShell, который будет непрерывно опрашивать счетчик производительности каждые N секунд, а затем суммировать значения, возвращаемые счетчиком. Моя конечная цель - получить результаты для дюжины или около того счетчиков, которые будут свернуты и отправлены на сервер Graphite для мониторинга и составления отчетов.

до сих пор это то, что я собрал вместе для конкретного счетчика, я просто не уверен, как получить пару вещей в стране волшебного вуду PowerShell.

  1. Я не могу понять, как получить идентификатор задания как целое число, чтобы я мог автоматизировать цикл while.
  2. Возвратите только данные CounterSample из Receive-Job, которые могут быть переданы в 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
    }
    

Мне также хотелось бы знать простой и эффективный способ динамического определения активной сетевой карты в окне Windows PowerShell v1.0 или v2.0. "\Network Interface(*)\" работает, но выдает мне все.

1 ответ

Решение

Что касается #1, возьмите InstanceId, возвращенный из 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
Другие вопросы по тегам