win7中vbs修改本地連線名稱
阿新 • • 發佈:2019-01-22
背景: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"
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