Поменяйте все сетевые карты на авто / авто на многих машинах

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

Спасибо! -Mathew

4 ответа

Решение

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам