Benutzer mit den meisten Antworten
Gesamtsumme Netzwerktraffic auslesen

Frage
-
Ich möchte gerne auslesen können, wieviel Traffic eine bestimmte Netzwerkkarte über einen längeren Zeitraum macht. Im Grunde brauche ich genau die Werte, die man für "Gesendet" und "Empfangen" sieht, wenn man bei einer Netzwerkverbindung auf "Status" klickt.
Ich habe bisher probiert:
.NET-Klasse System.Net.NetworkInformation.IPInterfaceStatistics mit Powershell verwenden.
Diese Klasse hat anscheinend die benötigten Eigenschaften, siehe
Allerdings weiß ich nicht, wie ich die Klasse richtig verwenden soll. Zunächst musste ich an einem Rechner von einem Kollegen testen, da die Klasse bei mir anscheinend nicht gefunden wird. .NET 4.5 ist installiert. Assembly ist laut MSDN "System", sollte also nicht das Problem sein?
[System.Net.NetworkInformation.IPInterfaceStatistics] Der Typ [System.Net.NetworkInformation.IPInterfaceStatistics] kann nicht gefunden werden: Stellen Sie sicher, dass die Assembly, die diesen Typ enthält, geladen wird. Bei Zeile:1 Zeichen:54 + [System.Net.NetworkInformation.IPInterfaceStatistics] <<<< + CategoryInfo : InvalidOperation: (System.Net.Netw...rfaceStatistics:String) [], RuntimeException + FullyQualifiedErrorId : TypeNotFound
Bei einem anderen Rechner konnte ich obige Zeile zwar ohne Fehler abschicken, konnte damit aber nichts anfangen. Mit New-Object ließ sich kein Objekt erstellen, "Konstruktor nicht gefunden". Ist das eine statische Klasse? Bei MSDN steht ein Konstruktor angegeben.
Wie verwendet man diese Klasse richtig, sodass ich auf die entsprechenden Properties zugreifen kann?
Daten per WMI auslesen
Hier die gängige Antwort die ich immer wieder zu diesem Thema finde. Lediglich die Daten pro Sekunde, die Klasse enthält keine Gesamtwerte.
Vielleicht gibt es doch eine Lösung per WMI?$computer = "LocalHost" ;
$namespace = "root\CIMV2" ;
$Tcpip_NI = Get-WmiObject -class Win32_PerfRawData_Tcpip_NetworkInterface -computername $computer -namespace $namespace ;
$Tcpip_NI | Select BytesReceivedPersec,BytesSentPersec,BytesTotalPersec ;
Per netsh:
$netsh_interface_stats = netsh interface ip show interface ; $netsh_interface_stats | Select-string "In Octets" ; $netsh_interface_stats | Select-string "Out Octets" ;
Ich verstehe nicht, was mit
Select-string "In Octets"
bezweckt werden soll? Es erscheint keine Ausgabe.
Per netstat -e
Gibt zwar entsprechende Werte zurück, diese sind aber viel zu groß. Ich wüßte gerne, was hier alles mit eingerechnet wird. Wenn ich beispielsweise 600MB übertrage, ist der Wert für "Gesendet" danach einige GB höher.
Perfmon
Keine entsprechenden Daten vorhanden
Was habt ihr sonst für Ideen? Ich möchte ungern ein größeres Programm zur Netzwerküberwachung laufen lassen, da die Werte später für mehrere Produktivsysteme erfasst werden sollen. Es muss doch möglich sein, genau diese Werte zu bekommen, die im Status der Netwerkverbindung angezeigt werden.
Antworten
-
Das sollte mit allen .NET Versionen Funktionieren.
[Edit] Wie Brima sagte : Die Methode GetIPStatistics() gibt es erst mit dem Framework 4.5, also muss man evtuell die Methode GetIPv4Statistics() nehmen.Dies Arbeitet mit der System.Net.NetworkInformation.NetworkInterface Klasse:
http://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkinterface%28v=vs.110%29.aspx
# Alle Netzwerkkarten auslesen $NetInterfaces = [System.Net.NetworkInformation.NetworkInterface]::GetAllNetworkInterfaces() ForEach($Interface in $NetInterfaces) { # Interface anzeigen $Interface # Statistiken für das interface Anzeigen $Interface.GetIPStatistics() }
Die Klasse IPInterfaceStatistics ist als abstract deklariert.
Das Schlüsselwort abstract ermöglicht die Erstellung von Klassen und Klassenmembern, die unvollständig sind und in einer abgeleiteten Klasse implementiert werden müssen.
Mit dem abstract-Modifizierer kann angegeben werden, dass die Klasse nur als Basisklasse anderer Klassen verwendet werden soll.
Dise Klassen können nicht Instanziert sondern nur abgeleitet werden (Vererbt).
Member, die als abstrakt gekennzeichnet oder in einer abstrakten Klasse enthalten sind, müssen von Klassen implementiert werden,
die von der abstrakten Klasse abgeleitet sind.und hier:
PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
auf der deutschsprachigen PowerShell Community
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+
- Als Antwort markiert Kevin Meister Dienstag, 21. Januar 2014 09:10
- Bearbeitet Peter Kriegel Dienstag, 21. Januar 2014 11:10
Alle Antworten
-
Hallo,
ab >= Windows 8 bzw. W2K12
Get-NetAdapterStatistics
oder
Get-WmiObject -namespace root/StandardCimv2 MSFT_NetAdapterStatisticsSettingData | Select-Object Name, ReceivedBytes, SentBytes
Andere OS habe ich im Moment nicht griff bereit.
Aber im Scripting Guy Blog wird in den letzten Tagen das Thema Netzwerk behandelt, zum Thema Statistik z.B. im folgenden Beitrag
Scripting Guy
Beste Gruesse
brima- Als Antwort markiert Kevin Meister Dienstag, 21. Januar 2014 08:08
- Tag als Antwort aufgehoben Kevin Meister Dienstag, 21. Januar 2014 08:40
-
Das sollte mit allen .NET Versionen Funktionieren.
[Edit] Wie Brima sagte : Die Methode GetIPStatistics() gibt es erst mit dem Framework 4.5, also muss man evtuell die Methode GetIPv4Statistics() nehmen.Dies Arbeitet mit der System.Net.NetworkInformation.NetworkInterface Klasse:
http://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkinterface%28v=vs.110%29.aspx
# Alle Netzwerkkarten auslesen $NetInterfaces = [System.Net.NetworkInformation.NetworkInterface]::GetAllNetworkInterfaces() ForEach($Interface in $NetInterfaces) { # Interface anzeigen $Interface # Statistiken für das interface Anzeigen $Interface.GetIPStatistics() }
Die Klasse IPInterfaceStatistics ist als abstract deklariert.
Das Schlüsselwort abstract ermöglicht die Erstellung von Klassen und Klassenmembern, die unvollständig sind und in einer abgeleiteten Klasse implementiert werden müssen.
Mit dem abstract-Modifizierer kann angegeben werden, dass die Klasse nur als Basisklasse anderer Klassen verwendet werden soll.
Dise Klassen können nicht Instanziert sondern nur abgeleitet werden (Vererbt).
Member, die als abstrakt gekennzeichnet oder in einer abstrakten Klasse enthalten sind, müssen von Klassen implementiert werden,
die von der abstrakten Klasse abgeleitet sind.und hier:
PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
auf der deutschsprachigen PowerShell Community
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+
- Als Antwort markiert Kevin Meister Dienstag, 21. Januar 2014 09:10
- Bearbeitet Peter Kriegel Dienstag, 21. Januar 2014 11:10
-
Hallo Peter,
also wenn ich richtig informiert bin gibt es die Methode GetIPStatistics() erst mit dem Framework 4.5, also muss man ev. GetIPv4Statistics() verwenden, die es in 4.5 gibt und heruner bis 2.0 und die gleichen Informationen liefert.
Beste Gruesse
brima
- Bearbeitet brima Dienstag, 21. Januar 2014 09:07
-
Hast recht Brima!
Helpful up!
Ich hatte nur nach der Klasse geschaut und nicht ab wann es die Funktion gibt!
Ist aber auch sehr mühsam, alles immer Haar-klein beachten zu müssen...PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
auf der deutschsprachigen PowerShell Community
Mein 21 Teiliger PowerShell Video Grundlehrgang
Deutsche PowerShell Videos auf Youtube
Folge mir auf:
Twitter | Facebook | Google+