ネットワーク機器の変更により、自動ネゴシエーション用に多数のマシンNICを元に戻す必要がある場合があります。これを自動化する最良の方法は何ですか? AutoitでコンパイルされたexeがグループポリシーまたはSCCMを介してプッシュされたと思います。例があれば、スクリプトを投稿してください。私がヒットしているすべてのシステムが同じNICを持っているかどうかはわかりませんので、すべての既知のカードを自動にリセットする何かが素晴らしいでしょう。
ありがとう! -マシュー
これがあなたが探していることをするためのスクリプトです。ただし、それを機能させるには、いくつかの「宿題」を行う必要があります。
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で正常に動作します...)
それはあなたを直すはずです。
私はしばらくこのようなことをしていませんが、これを変更する方法は各NICカード、そしておそらくNICドライバー。
IMOを処理する最良の方法は、レジストリに変更を加えることです。 PCのモデルが12未満の場合は、おそらくそれほど難しくはありません。そうでない場合は、問題が発生します。
おそらく最良のオプションはWMIスクリプトです。
例を示します 開始するには、ネットワークカード情報を読み取ります。リモートコンピューター用にそれらを設定するのは簡単です-computername変数を配列に変更し、それらをループして、getの代わりにsetメソッドを呼び出します。
ServerfaultのWMIスクリプトの例はすでにいくつかあります。
ここでは流れに逆らい、手作業で変更することをお勧めします。新しいデバイスを古いものと同じfubar設定(100 /フルなど)になるように事前構成してから、ネットワークデバイスとコンピューターを一度に1つずつリセットします。それは非常に厄介な仕事ですが、すべてがうまくいくことを確認する方が良いです、そしてあなたは一度だけそれをする必要があります。
間違いを犯すのは人間であり、物事を本当に失敗させるにはスクリプトが必要です。