背景:win7系统有2个网口,但是本地连接的名称顺序与其不一致,此脚本可实现逻辑顺序与物理顺序一致的功能。比如Lan1 为本地连接,Lan2为本地连接2.因为设备较多,特输出脚本。
注意:
1.修改名称时需要以管理员身份运行。可通过已管理员身份启动cmd,然后在cmd中运行vbs。
2.经确认所有设备的 lan1的 PnpInstanceID 均相同,根据此值找到逻辑eth0,并命名为 本地连接。另外一个修改为 本地连接2.
实现思路:
1. 通过 For Each NC In CreateObject("Shell.Application").NameSpace(49).Items 分别获取 网络适配器的名称,即本地连接的名称。
2. 遍历 SYSTEM\ControlSet001\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318} 的下一级目录,在其中找到Connection的路径。
3.分别获取Connection的 name,PnpInstanceID 的键值。如果name的键值与步骤1中的适配器名称对应,则保持其注册表路径,PnpInstanceID,name。
4.如果PnpInstanceID 包含Const中的常量值,则认为是“本地连接”,否则为本地连接2.
'---以下为vbs脚本-----
Const ETH0 = "3&11583659&0&FE"
myLog = "D:\x.txt"
strComputer = "."
Set WshShell = WScript.CreateObject("WScript.Shell")
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyRoot = &H80000002
Regpath = "HKEY_LOCAL_MACHINE"
strKeyPath = "SYSTEM\ControlSet001\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}"
oReg.EnumKey strKeyRoot, strKeyPath, arrSubKeys
Dim regArrPath(1)
Dim regArrName(1)
Dim regArrPnp(1)
myStr = ""
i = 0
On Error Resume Next
For Each subkey In arrSubKeys
ArrSubKeyStr=ArrSubKeyStr & vbcrlf & subkey
CurRegPath = Regpath & "\" & strKeyPath & "\" & subkey & "\Connection"
NameValue = WshShell.RegRead(CurRegPath & "\name")
if 0 = Err.Number then
For Each NC In CreateObject("Shell.Application").NameSpace(49).Items
if NC.name = NameValue then
regArrPath(i) = CurRegPath
regArrName(i) = NameValue
regArrPnp(i) = WshShell.RegRead(CurRegPath & "\PnpInstanceID")
i = i + 1
end if
Next
else
Err.Number = 0
NameValue = ""
end if
Next
on error goto 0
For i = 0 to ubound(regArrPnp)
if instr(regArrPnp(i),ETH0) > 0 then
msgbox "本地连接 " & regArrName(i) & chr(10) & "Pnp: " & regArrPnp(i) & chr(10) & "path: " & regArrPath(i)
'msgbox "本地连接 --> " & regArrName(i)
AppendNotepad myLog ,"本地连接 " & regArrName(i) & chr(10) & "Pnp: " & regArrPnp(i) & chr(10) & "path: " & regArrPath(i)
WshShell.RegWrite regArrPath(i) & "\Name","本地连接","REG_SZ"
else
msgbox "本地连接2 " & regArrName(i) & chr(10) & "Pnp: " & regArrPnp(i)& chr(10) & "path: "& regArrPath(i)
'msgbox "本地连接2 --> " & regArrName(i)
AppendNotepad myLog , "本地连接2 " & regArrName(i) & chr(10) & "Pnp: " & regArrPnp(i)& chr(10) & "path: "& regArrPath(i)
WshShell.RegWrite regArrPath(i) & "\Name","本地连接 2","REG_SZ"
end if
next