共用方式為


WMI 工作:網路

用於管理網路的 WMI 任務,用來獲取有關連線以及 IP 或 MAC 位址的相關資訊。 如需其他範例,請參閱techNet ScriptCenter at 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 中的每一個 objItem,strMACAddress = objItem.MACAddress;Next

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