WMI (VBScript) 學習2: 本地串連配置資訊擷取和修改

來源:互聯網
上載者:User

主要實現功能: 在 "192.168.0.120" and "192.168.0.8" 之間切換網關地址

 

有幾點需要注意的:
1. 帶傳回值函數需聲明變數來接收其傳回值。否則如 objItem.EnableStatic(strIPAddress, strSubnetMask)不給定傳回值將出現

編譯器錯誤: 調用過程(Sub)時不能使用括弧

(為什嗎?)

 

2.對於VARIANT 資料型別為數組的資料,有三種訪問方式:
法一:直接用迴圈遍曆數組

'   For Each strIPAddress in objItem.IPAddress
'    WScript.Echo strIPAddress
'   Next

法二: 用數組上下標作為迴圈變數取值範圍遍曆

    For i=LBound(objItem.IPAddress) _
    to UBound(objItem.IPAddress)

        ...

    Next
法三:直接給定數組下標,如

    WScript.Echo strGateway(0)

 

本程式缺陷:

顯示本地串連屬性時前後代碼重複,可用函數來代替

 

'##########################################<br />'<case: find IP address by MacAddress, set static ip addres,s and change gateway between "192.168.0.120" and "192.168.0.8"<br />'connect to a local machine only, support can be found from ms-help://MS.MSDNQTR.v90.en/wmisdk/wmi/wmi_tasks__networking.htm<br />'for remote connection,please see ms-help://MS.MSDNQTR.v90.en/wmisdk/wmi/connecting_to_wmi_on_a_remote_computer.htm<br />'Be careful,when we call WMI methods, if it has return, we must have a variable for recieving the returns<br />strComputer = "."<br />strIPAddress = Array("192.168.0.131")<br />strSubnetMask =Array("255.255.255.0")<br />strGateway1 = Array("192.168.0.120")<br />strGateway2 = Array("192.168.0.8")<br />strGatewayMetric = Array(1)<br />Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2")<br />Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapter where " _<br /> & "NetConnectionID = '本地串連'")<br />For Each objItem in colItems<br /> strMacAddress = objItem.MACAddress<br /> WScript.Echo strMacAddress<br />Next<br />Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration")<br />For Each objItem in colItems<br />'由於本機有兩個相同MAC地址Win32_NetworkAdapterConfiguration對象,因此需加是否為空白判斷<br />'原因是當IPAddress為空白時,迴圈For Each strIPAddress in objItem.IPAddress會提示錯誤:<br />'執行階段錯誤: 對象不是一個集合<br /> If Not IsNull(objItem.IPAddress) Then<br /> If objItem.MACAddress = strMacAddress Then<br />'法一:用迴圈遍曆數組<br />' For Each strIPAddress in objItem.IPAddress<br />' WScript.Echo strIPAddress<br />' Next<br />'法二: 用數組界限遍曆<br /> For i=LBound(objItem.IPAddress) _<br /> to UBound(objItem.IPAddress)<br /> For j=LBound(objItem.IPSubnet) _<br /> to UBound(objItem.IPSubnet)<br /> For k=LBound(objItem.DefaultIPGateway) _<br /> to UBound(objItem.DefaultIPGateway)<br /> WScript.Echo "IPAddress:" & objItem.IPAddress(i)& VBNewLine _<br /> & "IPSubnet: " & objItem.IPSubnet(j) & VBNewLine _<br /> & "DefaultIPGateway: " & objItem.DefaultIPGateway(k)<br /> If objItem.DefaultIPGateway(k) = "192.168.0.8" Then<br /> strGateway = strGateway1<br /> Else strGateway = strGateway2<br /> End If</p><p>'法三:直接給定數組下標<br /> ’For l=LBound(strGateway) to UBound(strGateway)<br /> WScript.Echo strGateway(0)<br /> ‘Next<br /> Next<br /> Next<br /> Next </p><p>'SetGateways method only works when the Network Interface Card (NIC) is in the static IP mode.<br /> errEnable = objItem.EnableStatic( _<br /> strIPAddress, strSubnetMask)<br /> errGateways = objItem.SetGateways(_<br /> strGateway, strGatewaymetric)</p><p> End If<br /> End If<br />Next</p><p>WScript.Echo VBNewLine & "After rest ip address: " & VBNewLine<br />Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration")<br />For Each objItem in colItems<br /> If Not IsNull(objItem.IPAddress) Then<br /> If objItem.MACAddress = strMacAddress Then<br /> For i=LBound(objItem.IPAddress) _<br /> to UBound(objItem.IPAddress)<br /> For j=LBound(objItem.IPSubnet) _<br /> to UBound(objItem.IPSubnet)<br /> For k=LBound(objItem.DefaultIPGateway) _<br /> to UBound(objItem.DefaultIPGateway)<br /> WScript.Echo "IPAddress:" & objItem.IPAddress(i)& VBNewLine _<br /> & "IPSubnet: " & objItem.IPSubnet(j) & VBNewLine _<br /> & "DefaultIPGateway: " & objItem.DefaultIPGateway(k)<br /> If objItem.DefaultIPGateway(k) = "192.168.0.8" Then<br /> strGateway = strGateway1<br /> Else strGateway = strGateway2<br /> End If<br /> For l=LBound(strGateway) to UBound(strGateway)<br /> WScript.Echo strGateway(l)<br /> Next<br /> Next<br /> Next<br /> Next</p><p> End If<br /> End If<br />Next<br />'/case><br />'##########################################<br />

 

 

當然,還有更簡單的命令列方法

@echo off<br />netsh interface ip show address | find "192.168.0.120"<br />if %errorlevel%==0 (<br />goto :To8<br />) else (<br />netsh interface ip show address | find "192.168.0.8" && goto :To120<br />)</p><p>:To8<br />echo change gateway from 192.168.0.120 to 192.168.0.8<br />netsh interface ip set address "本地串連" static 192.168.0.131 255.255.255.0 192.168.0.8 1<br />pause<br />goto :EOF</p><p>:To120<br />echo change gateway from 192.168.0.8 to 192.168.0.120<br />netsh interface ip set address "本地串連" static 192.168.0.131 255.255.255.0 192.168.0.120 1<br />pause<br />goto :EOF

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.