On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration Where MACAddress = '99:99:99:AA:99:A9'")
For Each objItem in colItems
For Each strIPAddress in objItem.IPAddress
Wscript.Echo "IP Address: " & strIPAddress
Next
Next
您瞧,一點都不複雜。指令碼一開始先連線到本機電腦上的 WMI 服務 (我們也可以只連線到遠端電腦上的 WMI 服務)。接著再以下面這行程式碼,擷取具有 MAC 地址 99:99:99:AA:99:A9 的所有網路介面卡:
Set colItems = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration Where MACAddress = '99:99:99:AA:99:A9'")
剩下的就是逐一檢查集合資訊,並傳回與該網路介面卡有關的 IP 位址。注意囉,很多人在這裡很容易犯錯:我們要傳回的是每一個網路介面卡的數個 IP 位址。一個網路介面卡當然可能有好幾個 IP 位址,因為 IPAddress 屬性會把值以陣列的型態儲存。所以我們得設定第二個 For Each 迴圈來循環處理這一個回傳的集合。
For Each strIPAddress in objItem.IPAddress
Wscript.Echo "IP Address: " & strIPAddress
Next
別忘了,就算只有一個 (或跟本沒有) IP 位址,還是得這麼做。
萬一具有特定 MAC 地址的網路介面卡根本不存在,會發生什麼事呢?很簡單,您根本不會收到任何資料。但是我們還要稍微添加一些指令碼,根據集合的 Count 屬性而有所反應: 如果值為 0,表示集合中空空如也,也就是沒有任何網路介面卡具有 MAC 地址。下面修改過的指令碼會在找不到這個介面卡時傳回適當的訊息:
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration Where MACAddress = '99:99:99:AA:99:A9'")
If colItems.Count = 0 Then
Wscript.Echo "There are no adapters with that MAC address."
Wscript.Quit
End If
For Each objItem in colItems
For Each strIPAddress in objItem.IPAddress
Wscript.Echo "IP Address: " & strIPAddress
Next
Next
反正來都來了,再贈送一些指令碼。這個指令碼會傳回電腦上所有網路介面卡的名稱和 MAC 地址。當然您自己不費吹灰之力就可以寫出來了,我們連吹灰的力氣都替您省了:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapter")
For Each objItem in colItems
Wscript.Echo objItem.Name, objItem.MACAddress
Next
|