Windows

獲取 Windows 機器的 MAC 地址

  • November 26, 2016

好的,伙計們,這不是標題可能暗示的通常容易回答的問題……

我需要從執行 Windows 的機器(從 XP 到 Server2012)獲取 MAC 地址。我可以使用以下選項:

  1. getmac - 一般都很好,它返回 MAC 地址的格式也適合我,但它在過去給我帶來了問題。

  2. WMIC - 一般也很好,但過去也給我帶來了問題,

而且它的性能落後(尤其是在低規格機器上)。

  1. ipconfing - 從命令輸出中檢索它的傳統方式。可以工作,但如果存在多個介面,解析輸出可能會很麻煩。

所以問題如下。為了獲得機器的 MAC 地址,上述所有方法的最佳替代方法是什麼。請記住,我將通過 shell 腳本呼叫任何實用程序(無論這增加了等式),並且我正在幾個不同的 Windows 版本(從專業版到嵌入式 POS)上進行部署。

Powershell 顯然是不可能的,因為 XP 不支持它。另外我想避免使用 WMIC 的原因是 1)我遇到的安裝錯誤(導致重大問題)和 2)因為某些 Windows 版本(例如 XP 嵌入式)不包含它。

我嘗試使用 ARP 表來獲取它,但據我所知,它不會列出本地機器的 MAC 地址。

歡迎任何有用的提示或想法。

您可以使用 VBScript。http://www.robvanderwoude.com/vbstech_network_mac.php上的程式碼可以修改以獲得您需要的資訊。

VBScript 程式碼:

intCount = 0
strMAC   = ""
' We're interested in MAC addresses of physical adapters only
strQuery = "SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionID > ''"

Set objWMIService = GetObject( "winmgmts://./root/CIMV2" )
Set colItems      = objWMIService.ExecQuery( strQuery, "WQL", 48 )

For Each objItem In colItems
    If InStr( strMAC, objItem.MACAddress ) = 0 Then
        strMAC   = strMAC & "," & objItem.MACAddress
        intCount = intCount + 1
    End If
Next

' Remove leading comma
If intCount > 0 Then strMAC = Mid( strMAC, 2 )

Select Case intCount
    Case 0
        WScript.Echo "No MAC Addresses were found"
    Case 1
        WScript.Echo "MAC Address: " & strMAC
    Case Else
        WScript.Echo "MAC Addresses: " & strMAC
End Select

要求: Windows 版本:Windows NT 4 SP4、2000、XP、Server 2003 或 Vista

網路:TCP/IP

客戶端軟體:WMI CORE 1.5 for Windows NT 4

腳本引擎:任意

總結:在 Windows NT 4 SP4 中工作(使用 WMI CORE 1.5)、Windows 2000 或更高版本。不適用於 Windows 95、98 或 ME。

引用自:https://serverfault.com/questions/816722