Como o TCP/IP é o protocolo de rede mais usado, a maioria das tarefas de administração do protocolo de rede de baixo nível envolve TCP/IP. Nesta seção, usamos o Windows PowerShell e WMI para executar essas tarefas.
Listando endereços IP de um computador
Para obter todos os endereços IP em uso no computador local, use o seguinte comando:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Format-Table -Property IPAddress
A saída desse comando é diferente da maioria das listas de propriedades porque os valores são apresentados entre chaves:
IPAddress
---------
{192.168.1.80}
{192.168.148.1}
{192.168.171.1}
{0.0.0.0}
Para entender por que as chaves aparecem, use o cmdlet Get-Member para examinar a propriedade IPAddress:
PS> Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Get-Member -Name IPAddress
TypeName: System.Management.ManagementObject#root\cimv2\Win32_NetworkAdapter
Configuration
Name MemberType Definition
---- ---------- ----------
IPAddress Property System.String[] IPAddress {get;}
A propriedade IPAddress para cada adaptador de rede é, na verdade, uma matriz. As chaves na definição indicam que IPAddress não é um valor de System.String, mas uma matriz de valores de System.String.
Listando dados de configuração do IP
Para exibir dados detalhados da configuração do IP para cada adaptador de rede, use o seguinte comando:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .
A exibição padrão do objeto de configuração do adaptador de rede é um conjunto muito reduzido das informações disponíveis. Para inspeção detalhada e solução de problemas, use Select-Object ou um cmdlet de formatação, como Format-List, para especificar as propriedades a serem exibidas.
Se você não estiver interessado nas propriedades IPX ou WINS — provavelmente isso acontecerá em uma rede TCP/IP moderna — também poderá usar o parâmetro ExcludeProperty de Select-Object para ocultar as propriedades com nomes que começam com "WINS" ou "IPX":
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Select-Object -Property [a-z]* -ExcludeProperty IPX*,WINS*
Esse comando retorna informações detalhadas sobre DHCP, DNS, roteamento e outras propriedades secundárias da configuração do IP.
Ping em computadores
Você pode executar um ping simples em um computador usando Win32_PingStatus. O comando a seguir executará o ping, mas retornará uma saída muito extensa:
Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName .
Uma forma mais útil de resumir as informações seria exibir somente as propriedades Address, ResponseTime e StatusCode, conforme gerado pelo comando a seguir: O parâmetro Autosize de Format-Table redimensiona as colunas de tabela de modo que elas sejam exibidas corretamente no Windows PowerShell.
PS> Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName . | Format-Table -Property Address,ResponseTime,StatusCode -Autosize Address ResponseTime StatusCode ------- ------------ ---------- 127.0.0.1 0 0 A status code of 0 indicates a successful ping.
Você pode usar uma matriz para executar ping em vários computadores com um único comando. Como há mais de um endereço, use ForEach-Object para executar ping em cada endereço separadamente:
"127.0.0.1","localhost","research.microsoft.com" | ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='" + $_ + "'") -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode
Você pode usar o mesmo formato de comando para executar ping em todos os computadores de uma sub-rede, como uma rede privada que utiliza o número de rede 192.168.1.0 e uma máscara de sub-rede de Classe C padrão (255.255.255.0). Somente os endereços no intervalo de 192.168.1.1 a 192.168.1.254 serão endereços locais legítimos (0 é sempre reservado para o número da rede e 255 é um endereço de difusão da sub-rede).
Para representar uma matriz dos números de 1 a 254 no Windows PowerShell, use a instrução 1..254. Um ping completo pode ser executado na sub-rede, gerando a matriz e adicionando os valores em um endereço parcial na instrução ping:
1..254| ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='192.168.1." + $_ + "'") -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode
Observe que essa técnica para a geração de um intervalo de endereços também pode ser usada em qualquer outro local. Você pode gerar um conjunto completo de endereços desta forma:
$ips = 1..254 | ForEach-Object -Process {"192.168.1." + $_}
Recuperando as propriedades do adaptador de rede
Anteriormente neste guia do usuário, mencionamos que você pode recuperar propriedades gerais de configuração usando Win32_NetworkAdapterConfiguration. Embora não sejam estritamente informações sobre TCP/IP, as informações sobre o adaptador de rede como os endereços MAC e os tipos de adaptador podem ser úteis para o entendimento do que está acontecendo em um computador. Para obter um resumo dessas informações, use o seguinte comando:
Get-WmiObject -Class Win32_NetworkAdapter -ComputerName .
Atribuindo o domínio DNS a um adaptador de rede
Para atribuir o domínio DNS para resolução automática de nomes, use o método Win32_NetworkAdapterConfiguration SetDNSDomain. Como você atribui o domínio DNS para cada configuração de adaptador de rede de forma independente, é necessário usar uma instrução ForEach-Object para atribuir o domínio a cada adaptador:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName . | ForEach-Object -Process { $_. SetDNSDomain("fabrikam.com") }
A instrução de filtragem "IPEnabled=true" é necessária porque, mesmo em uma rede que utiliza somente TCP/IP, várias configurações de adaptador de rede em um computador não são de adaptadores TCP/IP verdadeiros; elas são elementos gerais de software que oferecem suporte a RAS, PPTP, QoS e outros serviços para todos os adaptadores e, portanto, não possuem um endereço próprio.
Você pode filtrar o comando usando o cmdlet Where-Object, em vez do filtro Get-WmiObject .
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ComputerName . | Where-Object -FilterScript {$_.IPEnabled} | ForEach-Object -Process {$_.SetDNSDomain("fabrikam.com")}
Executando tarefas de configuração do DHCP
A modificação dos detalhes do DHCP envolve um conjunto de adaptadores de rede, como acontece com a configuração de DNS. Existem várias ações distintas que podem ser executadas usando WMI; abordaremos as mais comuns.
Determinando os adaptadores habilitados para DHCP
Para localizar os adaptadores habilitados para DHCP em um computador, use o comando a seguir:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName .
Para excluir adaptadores com problemas de configuração de IP, recupere somente os adaptadores habilitados para IP:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName .
Recuperando as propriedades do DHCP
Como as propriedades de DHCP de um adaptador geralmente começam com "DHCP", você pode usar o parâmetro Property de Format-Table para exibir somente essas propriedades:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName . | Format-Table -Property DHCP*
Habilitando o DHCP em cada adaptador
Para habilitar o DHCP em todos os adaptadores, use o comando a seguir:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName . | ForEach-Object -Process {$_.EnableDHCP()}
Você pode usar a instrução Filter "IPEnabled=true and DHCPEnabled=false" para evitar que o DHCP seja habilitado duas vezes, mas a omissão dessa etapa não causará nenhum erro.
Liberando e renovando as reservas de DHCP em adaptadores específicos
Uma classe Win32_NetworkAdapterConfiguration tem os métodos ReleaseDHCPLease e RenewDHCPLease. Ambos são utilizados da mesma maneira. Em geral, use esses métodos se precisar apenas liberar ou renovar os endereços de um adaptador em uma sub-rede específica. A maneira mais fácil de filtrar adaptadores em uma sub-rede é escolher somente as configurações de adaptador que utilizam o gateway da sub-rede. Por exemplo, o comando a seguir libera todas as concessões de DHCP dos adaptadores do computador local que estão obtendo concessões de DHCP em 192.168.1.254:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName . | Where-Object -FilterScript {$_.DHCPServer -contains "192.168.1.254"} | ForEach-Object -Process {$_.ReleaseDHCPLease()}
A única alteração na renovação de uma concessão de DHCP é o uso do método RenewDHCPLease, em vez do método ReleaseDHCPLease método:
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName . | Where-Object -FilterScript {$_.DHCPServer -contains "192.168.1.254"} | ForEach-Object -Process {$_.ReleaseDHCPLease()}
Observação: | |
Ao usar esses métodos em um computador remoto, saiba que você pode perder o acesso ao sistema remoto se estiver conectado a ele por meio do adaptador com a concessão liberada ou renovada. |
Liberando e renovando as reservas de DHCP em todos os adaptadores
Você pode executar liberações ou renovações de endereços globais DHCP em todos os adaptadores usando métodos Win32_NetworkAdapterConfiguration, ReleaseDHCPLeaseAll e RenewDHCPLeaseAll. Entretanto, o comando deve ser aplicado à classe do WMI em vez de em um adaptador específico, porque a liberação e renovação global de reservas são executadas na classe, e não em um adaptador específico.
Você pode obter uma referência a uma classe WMI, em vez de instâncias da classe, listando todas as classes WMI e selecionando apenas a classe desejada por nome. Por exemplo, o comando a seguir não retorna a classe Win32_NetworkAdapterConfiguration:
Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"}
Você pode tratar todo o comando como classe e chamar o método ReleaseDHCPAdapterLease nela. No comando seguinte, os parênteses que delimitam os elementos de pipeline Get-WmiObject e Where-Object instruem o Windows PowerShell a avaliá-los primeiro:
( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ).ReleaseDHCPLeaseAll()
Você pode utilizar o mesmo formato de comando para chamar o método RenewDHCPLeaseAll:
( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ).RenewDHCPLeaseAll()
Criando um compartilhamento de rede
Para criar um compartilhamento de rede, use o método Win32_Share Create:
(Get-WmiObject -List -ComputerName . | Where-Object -FilterScript {$_.Name -eq "Win32_Share"}).Create("C:\temp","TempShare",0,25,"test share of the temp folder")
Você também pode criar o compartilhamento usando net share no Windows PowerShell:
net share tempshare=c:\temp /users:25 /remark:"test share of the temp folder"
Removendo um compartilhamento de rede
Você pode remover um compartilhamento de rede com Win32_Share, mas o processo é um pouco diferente do utilizado na criação de um compartilhamento, pois você precisa recuperar o compartilhamento a ser removido, em vez da classe Win32_Share. A instrução a seguir excluirá o compartilhamento "TempShare":
(Get-WmiObject -Class Win32_Share -ComputerName . -Filter "Name='TempShare'").Delete()
Net share também funciona:
PS> net share tempshare /delete tempshare was deleted successfully.
Conectando uma unidade de rede acessível do Windows
Os cmdlets New-PSDrive cria uma unidade do Windows PowerShell, mas as unidades criadas dessa forma estarão disponíveis apenas para o Windows PowerShell. Para criar uma nova unidade de rede, você pode usar o objeto COM WScript.Network. O comando a seguir mapeia o compartilhamento \\FPS01\users para a unidade local B:
(New-Object -ComObject WScript.Network).MapNetworkDrive("B:", "\\FPS01\users")
O comando net use também funciona:
net use B: \\FPS01\users
As unidades mapeadas com WScript.Network ou net use serão imediatamente disponibilizadas para o Windows PowerShell.