Como detectar a velocidade (Ethernet rápida ou gigabit) de uma conexão de rede pela linha de comando do Windows

40

Para solucionar um problema de rede, gostaria de saber a "velocidade" real da rede para um determinado adaptador de rede, que pode ser visto ao abrir o "status" de uma conexão de rede no Windows: Configuração de velocidade

No entanto, quero investigar isso pela linha de comando ou com uma ferramenta pequena e separada, pois preciso solicitar isso para várias conexões de rede e não confio que o usuário busque as informações corretamente. A configuração de "Velocidade / Duplux" da placa de rede é sempre "Negociação automática", portanto, não posso dizer com isso que "Velocidade" obterá.

asdrubael
fonte

Respostas:

61

Tente esta consulta WMI:

wmic NIC where NetEnabled=true get Name, Speed

Isso deve fornecer a velocidade de todas as conexões de rede ativas.

Edit: como foi indicado, esta consulta deve ser modificada para funcionar no PowerShell (embora funcione bem no cmd.exe). Então, novamente, no PowerShell, você não precisa usar o WMI:

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

Como um bônus, isso fornece a velocidade em um formato agradável e legível por humanos (por exemplo, "1 Gbps"), em vez do número de bits por segundo.

Indrek
fonte
11
e se você tiver NIC sed wmic em que NetEnabled = true, obtenha Nome, Velocidade | sed -es / 000000000 / Gbit / | sed-ES / 000000 \ b / Mbit /
Jamie Cook
2
Essa consulta WMI funcionou no Windows 8 cmd, mas no Windows 7, eu tive que usar isso: wmic NIC onde "NetEnabled = 'true'" get "Name, Speed" Parece que o shell do cmd estava tentando interpretar o ',' como um separador de espaço ou comando. O PowerShell também tem esse problema. Obrigado por me colocar no caminho certo!
The Dude
Apenas o que eu precisava! Você é uma ótima pessoa; n; +1 (PS é esse bits por segundo?)
Cardinal System
11
@CardinalSystem Sim, são bits por segundo.
Indrek
6

Da resposta de Indrek:

WIC NIC em que NetEnabled = true obtém Nome, Velocidade

funcionará no prompt de comando. Para o PowerShell, use:

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

(A cláusula where e qualquer atributo get (como Nome e Velocidade) devem ser colocados entre aspas duplas e delimitados por vírgulas).

// Edição nº 1: expressão GET Name, Speed ​​deve ser incluída em um único conjunto de aspas duplas. Obter expressões podem não ter espaço entre elas

Tom
fonte
Isso é estranho. Funciona sem as aspas aqui.
DavidPostill
@DavidPostill Ele quebra a expressão GET no PS (depois de adicionar um segundo item).
Louis
11
Ah Confirmado. Você deve adicionar à sua resposta que as aspas são necessárias para o PowerShell e não são necessárias em um shell de cmd.
DavidPostill
2

Eu gostaria de contribuir com sua parte. Se você precisar executar o sed no Windows, poderá baixar o UnxUtils e extrair o sed.exe em c: \ Windows \ System32

Então, quando você usa o sed como sugeriu, funciona. (Windows 8.1)

Obrigado.

wmic NIC where NetEnabled=true get Name, Speed | sed -e s/000000000/Gbit/ | sed -e s/000000\b/Mbit/
sdkks
fonte
\bnão funciona sedno Cygwin. O que funciona para mim é [^0]. Ou, para ser concluído:s/000000[^0]/Mbit/
pepoluan
Exceto que isso engolirá o primeiro caractere diferente de zero após 000000, que pode não ser o que você deseja.
Wodin 28/04
-1

Você também pode usar:

cat /sys/class/net/enp6s0/speed

Ou quando é eth0, para determinar sua conexão de velocidade (100 ou 1000):

cat /sys/class/net/eth0/speed

Melroy
fonte
Então, por que a resposta foi reduzida?
Green Tree
11
Não sei, ainda parece zero aqui: S. Ow mabye porque este é apenas o Linux ..
Melroy