WMI Tasks: Networking
WMI tasks for networking manage and obtain information about connections and IP or MAC addresses. For other examples, see the TechNet ScriptCenter at http://www.microsoft.com/technet.
The script examples shown in this topic obtain data only from the local computer. For more information about how to use the script to obtain data from remote computers, see Connecting to WMI on a Remote Computer.
The following procedure describes how to run a script.
To run a script
- Copy the code and save it in a file with a .vbs extension. Ensure that your text editor does not add a .txt extension to the file.
- Open a command prompt window and navigate to the directory where you saved the file.
- Type cscript scriptfile.vbs at the command prompt.
Note By default, cscript displays the output of a script in the command prompt window. Because WMI scripts can produce large amounts of output, you might want to redirect the output to a file. Type cscript scriptfile.vbs > outfile.txt at the command prompt to redirect the output of the filename.vbs script to outfile.txt.
The following table lists script examples that can be used to obtain various types of data from the local computer.
| How do I... | WMI classes or methods |
|---|---|
| ...disable a network connection using WMI? | If you are using DHCP, use the Win32_NetworkAdapterConfiguration and the ReleaseDHCPLease method to release the IP address. If you are not using DHCP, you cannot use WMI to disable a network connection. To re-enable the network connection, use objNetCard.RenewDHCPLease. You can also release or renew all of the DHCP leases using the ReleaseDHCPLeaseAll and RenewDHCPLeaseAll methods. |
| ...disable or enable a NIC? | Use the Win32_NetworkAdapter class and the Disable or Enable methods. |
| ...determine which IP address has been assigned to a given network connection? | Use the Win32_NetworkAdapter class and the NetConnectionID property to determine the MAC address of the network connection. Then, use the Win32_NetworkAdapterConfiguration class to find the IP address associated with the MAC address.
strComputer = "." Set objWMIService = GetObject(_ "winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery _ ("Select * From Win32_NetworkAdapter " _ & "Where NetConnectionID = " & _ "'Local Area Connection 2'") For Each objItem in colItems 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
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 |
| ...determine the MAC address of a network adapter? | Use the Win32_NetworkAdapterConfiguration class and check the value of the MACAddress property. |
| ...determine the IP address of a computer? | Use the Win32_NetworkAdapterConfiguration class and check the value of the IPAddress property. This is returned as an array, so use a For-Each loop to get the value.
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 |
| ...configure a computer to start getting its IP address through DHCP? | Use the Win32_NetworkAdapterConfiguration class and the EnableDHCP method.
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 |
| ...assign a computer a static IP address? | Use the Win32_NetworkAdapterConfiguration class and the EnableStatic method.
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 |
| ...get information about network adapters without also retrieving information about things like RAS and VPN connections? | Use the Win32_NetworkAdapterConfiguration class. In your WQL query, use this clause: Where IPEnabled = True.
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 a computer without using Ping.exe? | Use the Win32_PingStatus class. Starting with Windows Vista, Win32_PingStatus can return data for computers that have both IPv4 addresses and IPv6 addresses.
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
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 |
Related topics
Send comments about this topic to Microsoft
Build date: 3/9/2012
- 3/25/2009
- Thomas Lee
- 1/29/2009
- Thomas Lee
- 3/25/2009
- Thomas Lee
<#
.SYNOPSIS
Disables active network cards
.DESCRIPTION
This script looks at each network card that is currently IP enabled, and
disables it by releasing the DHCP Lease. To re-enable the network interrace,
you just run IPCONFIG /RENEW.
This script is an MSDN Sample, rewritten using PowerShell
.NOTES
File Name : Disable-NetworkCard.ps1
Author : Thomas Lee - tfl@psp.co.uk
Requires : PowerShell V2 CTP3
.LINK
PowerShell script posted to:
http://www.pshscripts.blogspot.com/
Original MSDN Sample at:
http://msdn.microsoft.com/en-us/library/aa394595(VS.85).aspx
.EXAMPLE
PSH [C:\foo]: .\Disable-NetworkCard.ps1
Releasing lease on: [00000006] Broadcom NetXtreme Gigabit Ethernet
Releasing lease on: [00000012] Microsoft Virtual Network switch Adapte
#>
###
# Starting Script
###
$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()
}
# End of Script
- 2/7/2009
- Thomas Lee
- 2/7/2009
- Thomas Lee
<#
.SYNOPSIS
Gets and displays the IP address of a computer
.DESCRIPTION
This script uses Win32_NetworkAdapterConfiguration to
obtain, then display, a system's IP addresses.
NB: this only works on XP or later versions of Windows.
.NOTES
File Name : Get-IPAddress.ps1
Author : Thomas Lee - tfl@psp.co.uk
Requires : PowerShell V2 CTP3
.LINK
Script postesd to:
http://www.pshscripts.blogspot.com/
MSDN Sample at:
http://msdn.microsoft.com/en-us/library/aa394590(VS.85).aspx
.EXAMPLE
[ps] c:\foo> .\Get-IPAddress.ps1
IP Address : 10.10.1.115
IP Address : fe80::3953:f67b:2f1c:1323
IP Address : 10.10.1.120
IP Address : fe80::d8ed:afe2:2a97:a596
4 IP addresses found on this system
#>
###
# Start of Script
##
# Get Networking Adapter Configuration
$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"}
#End of Script
- 1/29/2009
- Thomas Lee
- 1/29/2009
- Thomas Lee