Tarefas do WMI: Rede

As tarefas do WMI para redes gerenciam e obtêm informações sobre conexões e endereços IP ou MAC. Para obter outros exemplos, consulte o TechNet ScriptCenter em https://www.microsoft.com/technet.

Os exemplos de script mostrados neste tópico obtêm dados somente do computador local. Para obter mais informações sobre como usar o script para obter dados de computadores remotos, confira Como conectar-se ao WMI em um computador remoto.

O procedimento a seguir descreve como executar um script.

Para executar um script

  1. Copie o código e salve-o em um arquivo com a extensão .vbs, por exemplo, nomedoarquivo.vbs. Verifique se o editor de texto não adicionou a extensão .txt ao arquivo.
  2. Abra uma janela do prompt de comando e navegue até o diretório no qual deseja salvar o arquivo.
  3. Digite cscript nomedoarquivo.vbs no prompt de comando.
  4. Se você não conseguir acessar um log de eventos, verifique se está executando a partir de um prompt de comandos com privilégios elevados. Alguns logs de eventos, como o Log de Eventos de Segurança, podem ser protegidos por UAC (Controles de Conta de Usuário).

Observação

Por padrão, o cscript exibe a saída de um script na janela do prompt de comando. Como os scripts do WMI podem gerar uma grande quantidade de saída, pode ser interessante redirecionar essa saída para um arquivo. Digite cscript nomedoarquivo.vbs > arquivodesaida.txt no prompt de comando para redirecionar a saída do script nomedoarquivo.vbs para arquivodesaida.txt.

A tabela a seguir lista exemplos de script que podem ser usados para obter diversos tipos de dados do computador local.

Como fazer... Classes ou métodos WMI
... desabilitar uma conexão de rede usando o WMI? Se você estiver usando DHCP, use o Win32_NetworkAdapterConfiguration e o método ReleaseDHCPLease para liberar o endereço IP. Se você não estiver usando DHCP, não poderá usar o WMI para desabilitar uma conexão de rede. Para reabilitar a conexão de rede, use objNetCard.RenewDHCPLease. Você também pode liberar ou renovar todas as concessões DHCP usando os métodos ReleaseDHCPLeaseAll e RenewDHCPLeaseAll.
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()
}
...desabilitar ou habilitar uma NIC?

Use a classe Win32_NetworkAdapter e os métodos Disable ou Enable.

... determinar qual endereço IP foi atribuído a uma determinada conexão de rede?

Use a classe Win32_NetworkAdapter e a propriedade NetConnectionID para determinar o endereço MAC da conexão de rede. Em seguida, use a classe Win32_NetworkAdapterConfiguration para localizar o endereço IP associado ao endereço MAC.

VB
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

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
... determinar o endereço MAC de um adaptador de rede?

Use a classe Win32_NetworkAdapterConfiguration e verifique o valor da propriedade MACAddress.

... determinar o endereço IP de um computador?

Use a classe Win32_NetworkAdapterConfiguration e verifique o valor da propriedade IPAddress. Isso é retornado como uma matriz, portanto, use um loop For-Each para obter o valor.

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"}
... configurar um computador para começar a obter seu endereço IP por meio do DHCP?

Use a classe Win32_NetworkAdapterConfiguration e o método 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
... atribuir um endereço IP estático a um computador?

Use a classe Win32_NetworkAdapterConfiguration e o método 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
... obter informações sobre adaptadores de rede sem também recuperar informações sobre coisas como conexões RAS e VPN?

Use a classe Win32_NetworkAdapterConfiguration. Em sua consulta WQL, use esta cláusula: 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
... fazer um ping em um computador sem usar Ping.exe?

Use a classe Win32_PingStatus.

O Win32_PingStatus pode retornar dados para computadores que têm endereços IPv4 e endereços 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
  

Tarefas do WMI para scripts e aplicativos

Exemplos de aplicativo C++ do WMI

TechNet ScriptCenter