'************************************************************************ 'DESCRIPTION: Determine the configured Speed and Duplex of a NIC 'WRITTEN BY: Daniel M. Jones 'DATE: September 2, 2009 'COMMENT: '************************************************************************ 'on error resume next '************************************************************************ ' VARIABLE DEFINITION '************************************************************************ CONST HKEY_LOCAL_MACHINE = &H80000002 CONST HKEY_USERS = &H80000003 CONST BROADCOM = 0 CONST INTEL = 1 CONST MARVELLYUKON = 2 CONST UNKNOWN = "Chickenless Soup" dim arrSpeedDuplexEnum(2, 5) dim arrVendorID(2, 0) dim arrSpeedDuplexKey(2, 0) arrSpeedDuplexEnum(BROADCOM, 0) = "" arrSpeedDuplexEnum(BROADCOM, 1) = "100Mbps \ Full Duplex" arrSpeedDuplexEnum(BROADCOM, 2) = "100Mbps \ Half Duplex" arrSpeedDuplexEnum(BROADCOM, 3) = "10Mbps \ Full Duplex" arrSpeedDuplexEnum(BROADCOM, 4) = "10Mbps \ Half Duplex" arrSpeedDuplexEnum(INTEL, 0) = "Auto" arrSpeedDuplexEnum(INTEL, 1) = "10Mbps \ Half Duplex" arrSpeedDuplexEnum(INTEL, 2) = "10Mbps \ Full Duplex" arrSpeedDuplexEnum(INTEL, 3) = "100Mbps \ Half Duplex" arrSpeedDuplexEnum(INTEL, 4) = "100Mbps \ Full Duplex" arrSpeedDuplexEnum(INTEL, 5) = "1000Mbps \ Full Duplex" arrSpeedDuplexEnum(MARVELLYUKON, 0) = "Auto" arrSpeedDuplexEnum(MARVELLYUKON, 1) = "10Mbps \ Half Duplex" arrSpeedDuplexEnum(MARVELLYUKON, 2) = "10Mbps \ Full Duplex" arrSpeedDuplexEnum(MARVELLYUKON, 3) = "100Mbps \ Half Duplex" arrSpeedDuplexEnum(MARVELLYUKON, 4) = "100Mbps \ Full Duplex" arrSpeedDuplexKey(BROADCOM, 0) = "WireSpeed" arrSpeedDuplexKey(INTEL, 0) = "SpeedDuplex" arrSpeedDuplexKey(MARVELLYUKON, 0) = "ConnectionType_A" arrVendorID(BROADCOM, 0) = "14E4" arrVendorID(INTEL, 0) = "8086" arrVendorID(MARVELLYUKON, 0) = "11AB" strKeyPath = "System\Currentcontrolset\Control\Class\{4D36E972-E325-11CE-BFC1-08002be10318}" set objShell = WScript.CreateObject("WScript.Shell") '************************************************************************ ' FUNCTIONS '************************************************************************ function ping (strComputer) ping = false set objExec = objShell.Exec("%comspec% /c ping " & strComputer & " -n 1 -w 100") do until objExec.Stdout.AtEndOfStream strLine = objExec.StdOut.ReadLine if (inStr(strLine, "Reply")) then ping = mid(strLine, 12, inStr(12, strLine, " ") - 13) loop end function '************************************************************************ ' BEGIN '************************************************************************ strComputer = ucase(inputBox("Asset")) if (ping(strComputer) = false) then msgbox "Computer unreachable" : wscript.quit set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys for each strSubKey in arrSubKeys strSpeedDuplex = UNKNOWN objReg.GetStringvalue HKEY_LOCAL_MACHINE, strKeyPath & "\" & strSubKey, "DriverDesc", strDescription objReg.GetStringvalue HKEY_LOCAL_MACHINE, strKeyPath & "\" & strSubKey, "ComponentID", strComponentID if (left(ucase(strComponentID), 8) = "PCI\VEN_") then strVendorID = mid(strComponentID, 9, 4) select case ucase(strVendorID) case arrVendorID(BROADCOM, 0) : strVendorID = BROADCOM case arrVendorID(INTEL, 0) : strVendorID = INTEL case arrVendorID(MARVELLYUKON, 0) : strVendorID = MARVELLYUKON case else : strVendorID = UNKNOWN end select if (strVendorID <> UNKNOWN) then objReg.GetStringvalue HKEY_LOCAL_MACHINE, strKeyPath & "\" & strSubKey, arrSpeedDuplexKey(strVendorID, 0), intValue if NOT (isNull(intValue)) then strSpeedDuplex = arrSpeedDuplexEnum(strVendor, intValue) end if msgbox "Description: " & strDescription & vbNewLine & "Speed\Duplex: " & strSpeedDuplex end if next msgbox "Done"