Altere todas as placas de rede para auto / auto em muitas máquinas

3

Devido a uma mudança no equipamento de rede, talvez seja necessário configurar um conjunto de NICs de máquinas para negociar automaticamente. Qual é a melhor maneira de automatizar isso? Eu estou pensando em um exe compilado Autoit empurrado para fora através da política de grupo ou SCCM. Por favor, poste seu script se você tiver um exemplo. Não tenho certeza de que todos os sistemas que estou atingindo terão os mesmos NICs, então algo que redefiniria todas as placas conhecidas como auto seria ótimo.

Obrigado! -Mateu

    
por MathewC 05.08.2009 / 14:00

4 respostas

4

Aqui está um script para fazer o que você está procurando. Você precisará fazer um pouco de "lição de casa" para fazê-lo funcionar, no entanto:

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

Você precisará localizar o valor "DriverDesc" para cada tipo de placa de rede que deseja alterar. (Olhe no registro sob o REG_DEVICE_PATH em cada uma das subchaves lá para encontrar os vários valores de DriverDesc). Incluímos instruções para um controlador Broadcom 57xx no script. Você precisará identificar o nome do valor do registro e a configuração de valor para cada tipo de NIC e, em seguida, adicionar entradas como aquelas nas linhas 11-15 para cada tipo de NIC.

Isso é executado no computador local agora. Não seria muito difícil fazer com que o nome do computador ficasse na linha de comando e fosse executado em computadores remotos. Como alternativa, você pode apenas executá-lo localmente em cada máquina.

Você precisará reinicializar a máquina depois que o script for executado para que a alteração entre em vigor. Se você estiver executando isso no Windows Vista ou no Windows 7, saiba que ele deve ser executado em um contexto "Elevado". (Ele foi desenvolvido no Windows 7 e funciona bem no Windows XP ...)

Isso deve resolver você.

    
por 05.08.2009 / 15:13
3

Eu não fiz nada assim há algum tempo, mas acredito que o método para mudar isso irá variar de acordo com cada placa NIC, e possivelmente por cada versão do driver NIC.

IMO a melhor maneira de lidar com isso seria fazer a alteração no registro. Se você tem menos de uma dúzia de modelos de PC, provavelmente não é tão difícil, caso contrário, uck.

    
por 05.08.2009 / 14:18
1

Provavelmente, a melhor opção é o script WMI.

Aqui está um exemplo para você começar, ele lê as informações da placa de rede. Configurá-los para um computador remoto é fácil - altere a variável computername para uma matriz, passe por eles e chame o método set em vez de get.

Já existem alguns exemplos de scripts WMI no serverfault.

    
por 05.08.2009 / 14:20
1

Eu vou contra o fluxo aqui e sugiro que você faça as alterações manualmente. Pré-configure o novo dispositivo para ter as mesmas configurações de fubar que o antigo (100 / full ou qualquer outro) e depois redefina o dispositivo de rede e os computadores, um de cada vez. É um trabalho muito desagradável, mas é melhor ter certeza de que tudo vem à tona e você só precisa fazer isso uma vez.

Errar é humano, realmente estragar tudo requer um script.

    
por 05.08.2009 / 15:53