2013-04-01 6 views
6

Voglio calcolare i byte inviati e ricevuti da un particolare processo. Voglio usare PowerShell per quello. Qualcosa che posso fare usando Resource Monitor-> Network Activity. Come posso farlo usando il gettoniere?Utilizzo di processo di rete con PowerShell

+0

Prova a guardare il cmdlet 'Get-Counter' – Syddraf

risposta

0

C'è davvero un buon articolo Scripting Guy sull'utilizzo del Get-Counter cmdlet qui:

Scripting Guy - Get-Counter

Il trucco sarà trovare il contatore che è necessario, e non credo che si può ottenere la granularità stai cercando in quanto sono gli stessi contatori utilizzati da PerfMon. È più focalizzato sull'intera interfaccia di rete rispetto ai singoli processi che utilizzano l'interfaccia. Detto questo, se è l'unica cosa che usa l'interfaccia fornita, dovrebbe fare bene il trucco.

Date un'occhiata alle opzioni di interfaccia di rete disponibili per un nuovo inizio:

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

Non si può, a quanto pare. Non riesco assolutamente a trovare i contatori da cui sta leggendo il monitor delle prestazioni, anche se potrebbero esserci altre persone. Potrebbe esserci qualche altro modo oltre al banco di prova, ma è quello che hai richiesto espressamente.

Guardando attraverso i contatori, la cosa più vicina che si trova sono i contatori "IO Read Bytes/sec" e "IO Write Bytes/sec" sull'oggetto del processo.

Il problema con questi è che contano più della semplice attività di rete. La descrizione in perfmon dice:

"Questo contatore conta tutte le attività di I/O generato dal processo di include file, rete e dispositivo di I/O."

Detto questo, se si sa che il processo si desidera monitorare solo o principalmente scrive sulla connessione di rete, questo potrebbe essere meglio che non misurare nulla.

Faresti va su di esso come questo (userò Chrome come esempio poiché è comodamente in esecuzione e utilizzando i dati in questo momento):

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

Questo sarà solo vi darà una lettura di una volta . Se vuoi continuare a leggere puoi aggiungere l'interruttore continuo.

L'oggetto PerformanceCounterSampleSet restituito non è esattamente carino con cui lavorare, ma è possibile trovare la lettura effettiva in $ obj.countersamples.cookedvalue.

L'elenco sarà abbastanza lungo (se navighi come me). Chrome è in esecuzione in molti processi separati, quindi faremo un po 'di matematica per farli aggiungere tutti e presentati in KB.

Risultato finale:

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

L'esecuzione di questo sarà solo continuamente uscita una lettura di quanti KB/s Chrome sta usando.