Jak wykryć prędkość (szybki lub gigabitowy Ethernet) połączenia sieciowego przez linię poleceń Windows

40

Aby rozwiązać problem z siecią, chciałbym zapytać o rzeczywistą „prędkość” sieci dla danej karty sieciowej, którą można zobaczyć po otwarciu „statusu” połączenia sieciowego w systemie Windows: Ustawienie prędkości

Jednak chcę o to zapytać za pomocą wiersza polecenia lub małego, oddzielnego narzędzia, ponieważ muszę poprosić o to dla wielu połączeń sieciowych i nie ufam użytkownikowi, że poprawnie pobierze informacje. Ustawienie karty „Speed ​​/ Duplux” karty sieciowej to zawsze „Auto Negotiate”, więc nie mogę z tego stwierdzić, jaką „Speed” dostanę.

asdrubael
źródło

Odpowiedzi:

61

Spróbuj tego zapytania WMI:

wmic NIC where NetEnabled=true get Name, Speed

To powinno dać Ci szybkość wszystkich aktywnych połączeń sieciowych.

Edycja: jak wskazano, to zapytanie musi zostać zmodyfikowane, aby działało w PowerShell (działa jednak dobrze w cmd.exe). Z drugiej strony, w PowerShell nie musisz wcale używać WMI:

Get-NetAdapter | where Status -eq "Up" | select InterfaceDescription, LinkSpeed

Jako bonus daje to szybkość w ładnym, czytelnym dla człowieka formacie (np. „1 Gbps”), a nie liczbę bitów na sekundę.

Indrek
źródło
1
a jeśli masz sed wmic NIC, gdzie NetEnabled = true, pobierz nazwę, prędkość | sed -es / 000000000 / Gbit / | sed -es / 000000 \ b / Mbit /
Jamie Cook
2
To zapytanie WMI działało w Windows 8 cmd, ale w Windows 7 musiałem użyć tego: wmic NIC gdzie „NetEnabled =„ true ”„ get ”Name, Speed” Wygląda na to, że powłoka cmd próbowała zinterpretować „,” jako separator spacji lub poleceń. PowerShell ma również ten problem. Dzięki, że postawiłeś mnie na właściwej drodze!
Koleś
Dokładnie to, czego potrzebowałem! Jesteś wspaniałą osobą; n; +1 (PS czy to bitów na sekundę?)
Kardynał System
1
@CardinalSystem Tak, to bity na sekundę.
Indrek
6

Z odpowiedzi Indreka:

wmic NIC gdzie NetEnabled = true get Nazwa, prędkość

będzie działać w wierszu polecenia. W przypadku programu PowerShell:

wmic NIC where "NetEnabled='true'" get "Name,Speed"

( Klauzula where i wszelkie atrybuty get (takie jak Name i Speed) muszą być ujęte w podwójny cudzysłów i oddzielone przecinkami).

// Edycja nr 1: GET wyrażenie Nazwa, prędkość musi być zawarta w jednym zestawie podwójnych cudzysłowów. Uzyskaj wyrażenia mogą nie mieć spacji między nimi

Tomek
źródło
To jest dziwne. Działa bez cytatów tutaj.
DavidPostill
@DavidPostill Łamie wyrażenie GET w PS (po dodaniu drugiego elementu).
Louis,
1
Ach Zatwardziały. Powinieneś dodać do swojej odpowiedzi, że cytaty są wymagane dla PowerShell i nie są potrzebne w powłoce cmd.
DavidPostill
2

Chciałbym przyczynić się do twojego udziału. Jeśli chcesz uruchomić sed w systemie Windows, możesz pobrać UnxUtils, a następnie wyodrębnić sed.exe do c: \ Windows \ System32

Następnie, gdy używasz seda zgodnie z sugestią, działa. (Windows 8.1)

Dzięki.

wmic NIC where NetEnabled=true get Name, Speed | sed -e s/000000000/Gbit/ | sed -e s/000000\b/Mbit/
sdkks
źródło
\bnie działa sedw Cygwin. Dla mnie działa [^0]. Lub, aby być kompletnym:s/000000[^0]/Mbit/
pepoluan
Tyle że połknie pierwszy niezerowy znak po 000000, co może nie być tym, czego chcesz.
Wodin 28.04.16
-1

Możesz także użyć:

cat /sys/class/net/enp6s0/speed

Lub gdy jest to eth0, aby określić prędkość połączenia (100 lub 1000):

cat /sys/class/net/eth0/speed

Melroy
źródło
więc dlaczego odpowiedź została odrzucona?
Green Tree
1
Nie wiem, wydaje się, że tutaj wciąż jest zero: S. Ow mabye, ponieważ jest to tylko Linux ..
Melroy