WMI 工作:網路

網路管理的 WMI 工作,並取得連線和 IP 或 MAC 位址的相關資訊。 如需其他範例,請參閱 位於 的 TechNet ScriptCenter https://www.microsoft.com/technet

本主題所示的腳本範例只會從本機電腦取得資料。 如需如何使用腳本從遠端電腦取得資料的詳細資訊,請參閱 連線到遠端電腦上的 WMI

下列程式描述如何執行腳本。

執行指令碼

  1. 複製程式碼,並將它儲存在副檔名為 .vbs 的檔案中,例如 filename.vbs。 請確定文字編輯器不會將.txt副檔名新增至檔案。
  2. 開啟命令提示字元視窗,並流覽至您儲存檔案的目錄。
  3. 在命令提示字元中輸入 cscript filename.vbs
  4. 如果您無法存取事件記錄檔,請檢查您是否從提升許可權的命令提示字元執行。 某些事件記錄檔,例如安全性事件記錄檔,可能會受到使用者存取控制 (UAC) 保護。

注意

根據預設,cscript 會在命令提示字元視窗中顯示腳本的輸出。 因為 WMI 腳本可以產生大量的輸出,所以您可能會想要將輸出重新導向至檔案。 在命令提示字元中輸入 cscript filename.vbs > outfile.txt ,將 filename.vbs 腳本的輸出重新導向至 outfile.txt

下表列出可用來從本機電腦取得各種資料類型的腳本範例。

如何… WMI 類別或方法
...使用 WMI 停用網路連線嗎? 如果您使用 DHCP,請使用 Win32_NetworkAdapterConfigurationReleaseDHCPLease 方法來釋放 IP 位址。 如果您未使用 DHCP,則無法使用 WMI 來停用網路連線。 若要重新啟用網路連線,請使用 objNetCard.RenewDHCPLease。 您也可以使用 ReleaseDHCPLeaseAllRenewDHCPLeaseAll 方法釋放或更新所有 DHCP 租用。
VB
strComputer = "."
Set objWMIService = GetObject( _
    "winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetCards = objWMIService.ExecQuery _
    ("Select * From Win32_NetworkAdapterConfiguration " _
        & "Where IPEnabled = True")
For Each objNetCard in colNetCards
    objNetCard.ReleaseDHCPLease()
Next
PowerShell
$Computer = "."
$net = Get-WMIObject -class Win32_NetworkAdapterConfiguration -ComputerName $computer
$netenabled = $net | where {$_.IPenabled}
foreach ($NetCard in $netenabled) {
    "Releasing lease on: {0}" -f $netcard.caption
 $netcard.ReleaseDHCPLease()
}
...停用或啟用 NIC?

使用 Win32_NetworkAdapter 類別和 DisableEnable 方法。

...判斷哪些 IP 位址已指派給指定的網路連線?

使用 Win32_NetworkAdapter 類別和 NetConnectionID 屬性來判斷網路連線的 MAC 位址。 然後,使用 Win32_NetworkAdapterConfiguration 類別來尋找與 MAC 位址相關聯的 IP 位址。

VB
strComputer = 「.」Set objWMIService = GetObject (_ 「winmgmts:\\」 & strComputer & 「\root\cimv2」) Set colItems = objWMIService.ExecQuery _ (「Select * from Win32_NetworkAdapter 」 _ & 「Where NetConnectionID = 」 & _ 「'Local Area Connection 2'」) 

針對 colItems strMACAddress = objItem.MACAddress Next 中的每個 objItem

Set colItems = objWMIService.ExecQuery _ (「Select * From Win32_NetworkAdapterConfiguration」)

For Each objItem in colItems If objItem.MACAddress = strMACAddress Then For Each strIPAddress in objItem.IPAddress Wscript.Echo "IP Address: " & strIPAddress Next End If Next

VB
strComputer = "."
Set objWMIService = GetObject( _
    "winmgmts:\\" & strComputer & "\root\cimv2")
Set colNics = objWMIService.ExecQuery _
    ("Select * From Win32_NetworkAdapter " _
        & "Where NetConnectionID = " & _
        "'Local Area Connection'")
 
For Each objNic in colNics
    Set colNicConfigs = objWMIService.ExecQuery _
      ("ASSOCIATORS OF " _
          & "{Win32_NetworkAdapter.DeviceID='" & _
      objNic.DeviceID & "'}" & _
      " WHERE AssocClass=Win32_NetworkAdapterSetting")
    For Each objNicConfig In colNicConfigs
        For Each strIPAddress in objNicConfig.IPAddress
            Wscript.Echo "IP Address: " &  strIPAddress
        Next
    Next
Next
...判斷網路介面卡的 MAC 位址?

使用 Win32_NetworkAdapterConfiguration 類別,並檢查 MACAddress 屬性的值。

...判斷電腦的 IP 位址?

使用 Win32_NetworkAdapterConfiguration 類別,並檢查 IPAddress 屬性的值。 這會以陣列的形式傳回,因此請使用For-Each迴圈來取得值。

VB
strComputer = "."
Set objWMIService = GetObject( _ 
    "winmgmts:\\" & strComputer & "\root\cimv2")
Set IPConfigSet = objWMIService.ExecQuery _
    ("Select IPAddress from Win32_NetworkAdapterConfiguration ")
 
For Each IPConfig in IPConfigSet
    If Not IsNull(IPConfig.IPAddress) Then 
        For i=LBound(IPConfig.IPAddress) _
            to UBound(IPConfig.IPAddress)
                WScript.Echo IPConfig.IPAddress(i)
        Next
    End If
Next
PowerShell
$Computer = "."
$IPconfigset = Get-WmiObject Win32_NetworkAdapterConfiguration
  
# Iterate and get IP address
$count = 0
foreach ($IPConfig in $IPConfigSet) {
   if ($Ipconfig.IPaddress) {
      foreach ($addr in $Ipconfig.Ipaddress) {
   "IP Address   : {0}" -f  $addr;
   $count++ 
   }
   }
}
if ($count -eq 0) {"No IP addresses found"}
else {"$Count IP addresses found on this system"}
...設定電腦開始透過 DHCP 取得其 IP 位址嗎?

使用 Win32_NetworkAdapterConfiguration 類別和 EnableDHCP 方法。

VB
strComputer = "."
Set objWMIService = GetObject(_
    "winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
    ("Select * from Win32_NetworkAdapterConfiguration " _
        & "where IPEnabled=TRUE")
 
For Each objNetAdapter In colNetAdapters
    errEnable = objNetAdapter.EnableDHCP()
Next
...將靜態 IP 位址指派給電腦嗎?

使用 Win32_NetworkAdapterConfiguration 類別和 EnableStatic 方法。

VB
strComputer = "."
Set objWMIService = GetObject( _
    "winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
    ("Select * from Win32_NetworkAdapterConfiguration " _
        & "where IPEnabled=TRUE")
strIPAddress = Array("192.168.1.141")
strSubnetMask = Array("255.255.255.0")
strGateway = Array("192.168.1.100")
strGatewayMetric = Array(1)
 
For Each objNetAdapter in colNetAdapters
    errEnable = objNetAdapter.EnableStatic( _
        strIPAddress, strSubnetMask)
    errGateways = objNetAdapter.SetGateways(_
        strGateway, strGatewaymetric)
Next
...取得網路介面卡的相關資訊,而不同時擷取 RAS 和 VPN 連線等專案的相關資訊?

使用 Win32_NetworkAdapterConfiguration 類別。 在您的WQL查詢中,使用這個子句:WHERE IPEnabled = True

VB
strComputer = "."
Set objWMIService = GetObject( _
    "winmgmts:\\" & strComputer & "\root\cimv2")
Set IPConfigSet = objWMIService.ExecQuery _
    ("Select IPAddress from Win32_NetworkAdapterConfiguration" _
        & " where IPEnabled=TRUE")
 
For Each IPConfig in IPConfigSet
    If Not IsNull(IPConfig.IPAddress) Then 
        For i=LBound(IPConfig.IPAddress) _
        to UBound(IPConfig.IPAddress)
            WScript.Echo IPConfig.IPAddress(i)
        Next
    End If
Next
...ping 電腦而不使用 Ping.exe?

使用 Win32_PingStatus 類別。

Win32_PingStatus 可以傳回同時具有 IPv4 位址和 IPv6 位址的電腦資料。

VB
strComputer = 「.」Set objWMIService = GetObject (_ 「winmgmts:\\」 & strComputer & 「\root\cimv2」) Set colPings = objWMIService.ExecQuery _ (「Select * From Win32_PingStatus where Address = '192.168.1.1'」) 

For Each objStatus in colPings If IsNull(objStatus.StatusCode) _ or objStatus.StatusCode<>0 Then WScript.Echo "Computer did not respond." Else Wscript.Echo "Computer responded." End If Next

VB
strComputer = "client1"
Set objShell = CreateObject("WScript.Shell")
Set objScriptExec = objShell.Exec( _
    "ping -n 2 -w 1000 " & strComputer)
strPingResults = LCase(objScriptExec.StdOut.ReadAll)
If InStr(strPingResults, "reply from") Then
    If InStr(strPingResults, "destination net unreachable") Then
        WScript.Echo strComputer & "did not respond to ping."
    Else
        WScript.Echo strComputer & " responded to ping."
    End If 
Else
    WScript.Echo strComputer & " did not respond to ping."
End If
  

腳本和應用程式的 WMI 工作

WMI C++ 應用程式範例

TechNet ScriptCenter