Here's a script to do what you're looking for. You're going to need to do some "homework" to get it to work, though:
Option Explicit
Const HIVE_HKLM = &H80000002
Const REG_DEVICE_PATH = "SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}"
Const DEBUGGING = 1
Dim objRegistry, arrSubkeys, strSubkey, strComputer, regexpSubkey, strValue, dictDriverChanges, strDriverName
Set dictDriverChanges = CreateObject("Scripting.Dictionary")
' For each given NIC, add an item for the driver description string (case insensitive match) and the value name and value that
' should be set in the NIC's properties
Set dictDriverChanges.Item("Broadcom NetXtreme 57xx Gigabit Controller") = CreateObject("Scripting.Dictionary")
dictDriverChanges.Item("Broadcom NetXtreme 57xx Gigabit Controller").Add "ValueName", "*SpeedDuplex"
dictDriverChanges.Item("Broadcom NetXtreme 57xx Gigabit Controller").Add "Value", "0"
' Pattern to match on subkeys - exactly 4 digits
Set regexpSubkey = new Regexp
regexpSubkey.Global = True
regexpSubkey.Pattern = "\d{4,4}"
' Comptuer to run against. Set to "." for the local computer, or specify the computer-name of a remote machine
strComputer = "."
Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
objRegistry.EnumKey HIVE_HKLM, REG_DEVICE_PATH, arrSubkeys
' Did we get back any strSubkeys?
If IsArray(arrSubkeys) Then
For Each strSubkey In arrSubkeys
' Is this a subkey we want to look at
If regexpSubkey.Execute(strSubkey).Count = 1 Then
objRegistry.GetStringValue HIVE_HKLM, REG_DEVICE_PATH & "\" & strSubkey, "DriverDesc", strValue
' Loop through all the drivers we know about looking for this driver
For Each strDriverName in dictDriverChanges
If UCase(strDriverName) = UCase(strValue) Then
If DEBUGGING = 1 Then WScript.Echo "Located driver " & strValue & ". Setting value " & dictDriverChanges.Item(strDriverName).Item("ValueName") & " to " & dictDriverChanges.Item(strDriverName).Item("Value")
objRegistry.SetStringValue HIVE_HKLM, REG_DEVICE_PATH & "\" & strSubkey, dictDriverChanges.Item(strDriverName).Item("ValueName"), dictDriverChanges.Item(strDriverName).Item("Value")
End If
Next ' strDriverName
End If
Next ' strSubkey
End If
You will need to locate the "DriverDesc" value for each kind of NIC you're going to want to change. (Look in the registry under the REG_DEVICE_PATH at each of the subkeys there to find the various DriverDesc values). I've included instructions for a Broadcom 57xx controller in the script. You will need to identify the registry value name and value setting for each kind of NIC and then add entries like those on lines 11-15 for each kind of NIC.
This runs against the local computer right now. It wouldn't be too hard to make it take the computer name on the command-line and run against remote computers. Alternatively, you can just run it locally on each machine.
You will need to reboot the machine after the script runs for the change to take effect. If you're running this on Windows Vista or Windows 7 be aware that it must run in an "Elevated" context. (It was developed on Windows 7 and works fine on Windows XP...)
That should fix you up.