Measure-Object -суммировать все counterSamples из непрерывного get-counter
Я пытаюсь написать сценарий PowerShell, который будет непрерывно опрашивать счетчик производительности каждые N секунд, а затем суммировать значения, возвращаемые счетчиком. Моя конечная цель - получить результаты для дюжины или около того счетчиков, которые будут свернуты и отправлены на сервер Graphite для мониторинга и составления отчетов.
до сих пор это то, что я собрал вместе для конкретного счетчика, я просто не уверен, как получить пару вещей в стране волшебного вуду PowerShell.
- Я не могу понять, как получить идентификатор задания как целое число, чтобы я мог автоматизировать цикл while.
Возвратите только данные 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