2013-04-01 17 views
6

Chcę obliczyć bajtów wysłanych i otrzymanych przez konkretny proces. Chcę użyć do tego celu powłoki. Co mogę zrobić za pomocą Monitora zasobów-> Aktywność sieciowa. Jak mogę to zrobić za pomocą get-counter?Sieciowe wykorzystanie procesu przy użyciu PowerShell

+0

Spróbuj spojrzeć na polecenie cmdlet 'Get-Counter' – Syddraf

Odpowiedz

0

Jest naprawdę dobry artykuł Skrypciarzu na temat korzystania z Get-Counter komandletu tutaj:

Scripting Guy - Get-Counter

Sztuką będzie znalezienie licznika, które są potrzebne, i nie sądzę, można uzyskać ziarnistości podążasz, ponieważ są to te same liczniki, których używa PerfMon. Jest bardziej skoncentrowany na całym interfejsie sieciowym niż na poszczególnych procesach korzystających z interfejsu. Powiedziawszy to, jeśli jest to jedyna rzecz przy użyciu danego interfejsu, powinna to zrobić ładnie.

Wystarczy popatrzeć na opcjach interfejsu sieci dostępnych na początek:

(get-counter -list "Network Interface").paths 
0

Nie można, jak się wydaje. Absolutnie nie mogę znaleźć liczników, od których odczytuje monitor wydajności, chociaż inne osoby mogą dzwonić. Może być też inny sposób niż licznik, ale o to właśnie prosiłeś.

Przyglądając się licznikom, najbliższym znalezionym obiektem są liczniki "IO odczytanych bajtów/s" i "IO Write Bytes/s" na obiekcie procesu.

Problem polega na tym, że liczą się one nie tylko w aktywności sieciowej. Opis w PerfMon mówi:

„Ten licznik zlicza wszystkie I/O aktywności generowanej przez proces do obejmują pliku, sieci i urządzenia I/O”.

W związku z tym, jeśli wiesz, że proces, który chcesz monitorować tylko lub głównie pisze do połączenia sieciowego, może to być lepsze niż nie mierzenie czegokolwiek.

Można by go o to tak (użyję Chrome jako przykład, ponieważ jest dogodnie działa i wykorzystując dane teraz):

get-counter "\Process(chrome*)\IO Read Bytes/sec" 

To będzie po prostu daje odczyt jednorazową . Jeśli chcesz dalej czytać, możesz dodać ciągły przełącznik.

Zwrócony obiekt PerformanceCounterSampleSet nie jest całkiem niezły, ale rzeczywisty odczyt można znaleźć w zmiennej obj.countersamples.cookedvalue.

Lista będzie dość długa (jeśli przeglądasz podobnie jak ja). Chrome działa w wielu oddzielnych procesach, więc zrobimy trochę matematyki, aby je wszystkie zsumować i zaprezentować w KB.

Wynik końcowy:

get-counter "\Process(chrome*)\IO Read Bytes/sec" -Continuous | foreach { 
    [math]::round((($_.countersamples.cookedvalue | measure -sum).sum/1KB), 2) 
    } 

Running to będzie po prostu stale wyjście A odczyt ile kb/s Chrome korzysta.

Powiązane problemy