web-dev-qa-db-ja.com

多くのマシンですべてのネットワークカードを自動/自動に変更します

ネットワーク機器の変更により、自動ネゴシエーション用に多数のマシンNICを元に戻す必要がある場合があります。これを自動化する最良の方法は何ですか? AutoitでコンパイルされたexeがグループポリシーまたはSCCMを介してプッシュされたと思います。例があれば、スクリプトを投稿してください。私がヒットしているすべてのシステムが同じNICを持っているかどうかはわかりませんので、すべての既知のカードを自動にリセットする何かが素晴らしいでしょう。

ありがとう! -マシュー

3
MathewC

これがあなたが探していることをするためのスクリプトです。ただし、それを機能させるには、いくつかの「宿題」を行う必要があります。

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

変更するNIC)の種類ごとに「DriverDesc」値を見つける必要があります(レジストリの各サブキーのREG_DEVICE_PATHの下を調べて、さまざまなDriverDesc値)。スクリプトにBroadcom 57xxコントローラーの手順を含めました。NIC)の種類ごとに、レジストリ値の名前と値の設定を特定してから、次のようなエントリを追加する必要があります。 NICの種類ごとに11〜15行目にあるもの。

これは現在、ローカルコンピューターに対して実行されます。コマンドラインでコンピューター名を取得してリモートコンピューターに対して実行するのはそれほど難しくありません。または、各マシンでローカルに実行することもできます。

変更を有効にするには、スクリプトの実行後にマシンを再起動する必要があります。これをWindowsVistaまたはWindows7で実行している場合は、「昇格」コンテキストで実行する必要があることに注意してください。 (これはWindows 7で開発され、Windows XPで正常に動作します...)

それはあなたを直すはずです。

4
Evan Anderson

私はしばらくこのようなことをしていませんが、これを変更する方法は各NICカード、そしておそらくNICドライバー。

IMOを処理する最良の方法は、レジストリに変更を加えることです。 PCのモデルが12未満の場合は、おそらくそれほど難しくはありません。そうでない場合は、問題が発生します。

3
duffbeer703

おそらく最良のオプションはWMIスクリプトです。

例を示します 開始するには、ネットワークカード情報を読み取ります。リモートコンピューター用にそれらを設定するのは簡単です-computername変数を配列に変更し、それらをループして、getの代わりにsetメソッドを呼び出します。

ServerfaultのWMIスクリプトの例はすでにいくつかあります。

1
gbjbaanb

ここでは流れに逆らい、手作業で変更することをお勧めします。新しいデバイスを古いものと同じfubar設定(100 /フルなど)になるように事前構成してから、ネットワークデバイスとコンピューターを一度に1つずつリセットします。それは非常に厄介な仕事ですが、すべてがうまくいくことを確認する方が良いです、そしてあなたは一度だけそれをする必要があります。

間違いを犯すのは人間であり、物事を本当に失敗させるにはスクリプトが必要です。

1
chris