1. 程式人生 > >win7中vbs修改本地連線名稱

win7中vbs修改本地連線名稱

背景: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