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
risposta
C'è davvero un buon articolo Scripting Guy sull'utilizzo del Get-Counter
cmdlet qui:
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
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.
Prova a guardare il cmdlet 'Get-Counter' – Syddraf