Программное определение скорости подключенной сети в Windows

Как я могу определить, какое соединение Ethernet установила моя сетевая карта? То есть моя сетевая карта - это устройство Gigabit Ethernet, но поскольку оно автоматически определяет, оно может быть подключено на скорости Gigabit или Fast Ethernet.

Как узнать, с какой скоростью он подключается?

Я пробовал использовать WMI Win32_NetworkAdapter, CIM_NetworkAdapter, даже wmic NET get Name,Speed, но все они возвращают пустое значение для скорости.

Кстати, я использую Windows XP Pro SP3. Но мне нужно решение, которое также будет работать для Windows Server 2003 (Standard & Enterprise), Windows Server 2008 и Windows Server 2008 R2.


person pepoluan    schedule 30.10.2012    source источник
comment
В третьем посте по этой ссылке есть VBScript, который работает для XP: social.msdn.microsoft.com/Forums/uk-UA/scripting/thread/   -  person Lizz    schedule 31.10.2012
comment
@Lizz, спасибо! Оно работает! Теперь, если вы можете опубликовать свой комментарий в качестве ответа, я отмечу его как ответ как можно скорее :)   -  person pepoluan    schedule 01.11.2012


Ответы (1)


Таинственный человек под кодовым именем mystifeid решил эту головоломку на этом сайте, третий пост внизу: http://social.msdn.microsoft.com/Forums/uk-UA/scripting/thread/e3936dff-7395-4a6a-ab35-aa1aab0bcd71

Вот их прекрасный код:

Dim strQuery, strQuery2, objLocator, objWMI, objItem, objItem2, colItems, colItems2, resultString, nicName
strQuery = "SELECT * FROM Win32_PerfFormattedData_Tcpip_NetworkInterface"
strQuery2 = "SELECT * FROM Win32_NetworkAdapter"
Set objLocator = CreateObject( "WbemScripting.SWbemLocator" )
Set objWMI = objLocator.ConnectServer( ".", "root\CIMV2" )
objWMI.Security_.ImpersonationLevel = 3
Set colItems2 = objWMI.ExecQuery( strQuery2, "WQL", 0 )
Set colItems = objWMI.ExecQuery( strQuery, "WQL", 0 )
resultString = ""
For Each objItem2 In colItems2
 If objItem2.NetConnectionStatus = 2 Then
  nicName = Mid(objItem2.Name, 1, 5)
  resultString = resultString & "Adapter Name : " & objItem2.Name & VbCrLf
  resultString = resultString & "MAC Address : " & objItem2.MACAddress & VbCrLf
  For Each objItem In colItems
   If Mid(objItem.Name, 1, 5) = nicName Then
    resultString = resultString & "CurrentBandwidth : " & objItem.CurrentBandwidth & VbCrLf
   End If
  Next
 End If
Next
Set objLocator = Nothing
Set objWMI = Nothing
Set colItems = Nothing
Set colItems2 = Nothing
WScript.Echo resultString

PS - Я скоро проверю его против Win7 и Win2008 и сообщу всем.

person Lizz    schedule 01.11.2012