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.




Sumário