Назад | Перейти на главную страницу

Измените все сетевые карты на авто / авто на многих машинах

Из-за изменений в сетевом оборудовании мне может потребоваться вернуть сетевые адаптеры нескольких машин в режим автоматического согласования. Как лучше всего это автоматизировать? Я думаю, что скомпилированный с помощью Autoit exe-файл вытесняется через групповую политику или SCCM. Пожалуйста, опубликуйте свой сценарий, если у вас есть пример. Я не уверен, что все системы, которые я использую, будут иметь одинаковые сетевые адаптеры, поэтому что-то, что сбрасывает все известные карты в автоматический режим, было бы здорово.

Спасибо! -Мэттью

Вот сценарий, который сделает то, что вы ищете. Однако вам нужно будет сделать некоторую "домашнюю работу", чтобы заставить его работать:

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

Вам нужно будет найти значение «DriverDesc» для каждого типа NIC, который вы хотите изменить. (Посмотрите в реестре под REG_DEVICE_PATH каждый из подразделов, чтобы найти различные значения DriverDesc). Я включил в сценарий инструкции для контроллера Broadcom 57xx. Вам нужно будет определить имя значения реестра и параметр значения для каждого типа сетевой карты, а затем добавить записи, подобные тем, которые указаны в строках 11-15 для каждого типа сетевой карты.

Прямо сейчас это работает против локального компьютера. Нетрудно было бы заставить его использовать имя компьютера в командной строке и запускать его на удаленных компьютерах. Как вариант, вы можете просто запустить его локально на каждой машине.

Вам потребуется перезагрузить компьютер после запуска сценария, чтобы изменения вступили в силу. Если вы используете его в Windows Vista или Windows 7, имейте в виду, что он должен работать в контексте «Повышенного уровня». (Он был разработан для Windows 7 и отлично работает в Windows XP ...)

Это должно вас поправить.

Я не делал ничего подобного в течение некоторого времени, но считаю, что способ изменения этого будет зависеть от каждой сетевой карты и, возможно, от каждой версии драйвера сетевой карты.

ИМО, лучший способ справиться с этим - внести изменения в реестр. Если у вас меньше дюжины моделей ПК, это, вероятно, не так уж и сложно, в противном случае - ну.

Я иду против течения и предлагаю вам внести изменения вручную. Предварительно сконфигурируйте новое устройство так, чтобы оно имело те же настройки fubar, что и старое (100 / полное или что-то еще), затем выполните и перезагрузите сетевое устройство и компьютеры по одному. Это огромная неприятная работа, но лучше убедиться, что все получится, и вам нужно сделать это только один раз.

Человеку свойственно ошибаться, чтобы действительно все испортить, нужен сценарий.

Наверное, лучший вариант - это сценарий WMI.

Вот пример Для начала он считывает информацию о сетевой карте. Установить их для удаленного компьютера очень просто - измените переменную computername на массив, переберите их и вызовите метод set вместо get.

Уже есть несколько примеров сценариев WMI на serverfault.