Executando tarefas de rede

Este exemplo só se aplica a plataformas Windows.

Como TCP/IP é o protocolo de rede mais frequentemente usado, a maioria das tarefas de administração de protocolo de rede de baixo nível envolve TCP/IP. Nesta seção, usamos o PowerShell e o WMI para realizar essas tarefas.

Listar endereços IP para um computador

Para obter todos os endereços IP em uso no computador local, use o seguinte comando:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Select-Object -ExpandProperty IPAddress

Como a propriedade IPAddress de um objeto Win32_NetworkAdapterConfiguration é uma matriz, você precisa usar o parâmetro ExpandProperty de Select-Object para ver toda a lista de endereços.

10.0.0.1
fe80::60ea:29a7:a233:7cb7
2601:600:a27f:a470:f532:6451:5630:ec8b
2601:600:a27f:a470:e167:477d:6c5c:342d
2601:600:a27f:a470:b021:7f0d:eab9:6299
2601:600:a27f:a470:a40e:ebce:1a8c:a2f3
2601:600:a27f:a470:613c:12a2:e0e0:bd89
2601:600:a27f:a470:444f:17ec:b463:7edd
2601:600:a27f:a470:10fd:7063:28e9:c9f3
2601:600:a27f:a470:60ea:29a7:a233:7cb7
2601:600:a27f:a470::2ec1

Usando o cmdlet Get-Member, você pode ver que a propriedade IPAddress é uma matriz:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Get-Member -Name IPAddress
   TypeName: Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_NetworkAdapterConfiguration

Name      MemberType Definition
----      ---------- ----------
IPAddress Property   string[] IPAddress {get;}

A propriedade IPAddress para cada adaptador de rede na verdade é uma matriz. Os colchetes na definição indicam que IPAddress não é um valor de System.String, mas sim uma matriz de valores System.String.

Listar dados de configuração de IP

Para exibir dados detalhados de configuração de IP de cada adaptador de rede, use o seguinte comando:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true

A exibição padrão para o objeto de configuração do adaptador de rede é um conjunto muito reduzido das informações disponíveis. Para inspeção profunda e solução de problemas, use Select-Object ou um cmdlet de formatação, como Format-List, para especificar as propriedades a serem exibidas.

Em redes TCP/IP modernas, é provável que você não tenha interesse em propriedades IPX ou WINS. Você pode usar o parâmetro ExcludeProperty de Select-Object para ocultar propriedades que têm nomes que começam com "WINS" ou "IPX".

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Select-Object -ExcludeProperty IPX*,WINS*

Esse comando retorna informações detalhadas sobre o DHCP, DNS, roteamento e outras propriedades de configuração de IP secundárias.

Executar ping em computadores

Você pode executar um ping simples em um computador usando Win32_PingStatus. O comando a seguir executa o ping, mas retorna uma saída longa:

Get-CimInstance -Class Win32_PingStatus -Filter "Address='127.0.0.1'"

Uma forma mais útil de resumir as informações é exibir as propriedades Address, ResponseTime e StatusCode geradas pelo comando a seguir. O parâmetro Autosize de Format-Table redimensiona as colunas da tabela para que sejam exibidas corretamente no PowerShell.

Get-CimInstance -Class Win32_PingStatus -Filter "Address='127.0.0.1'" |
    Format-Table -Property Address,ResponseTime,StatusCode -Autosize
Address   ResponseTime StatusCode
-------   ------------ ----------
127.0.0.1            0          0

Um StatusCode de 0 indica um ping bem-sucedido.

Você pode usar uma matriz para executar o ping de 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','bing.com' |
  ForEach-Object -Process {
    Get-CimInstance -Class Win32_PingStatus -Filter ("Address='$_'") |
      Select-Object -Property Address,ResponseTime,StatusCode
  }

Você pode usar o mesmo formato de comando para executar o ping de todos os endereços em uma sub-rede, como uma rede privada que usa o número da 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 são endereços locais legítimos (0 é sempre reservado para o número da rede e 255 é um endereço de difusão de sub-rede).

Para representar uma matriz de números de 1 a 254 no PowerShell, use a expressão 1..254. Um ping de sub-rede completa pode ser executado adicionando cada valor a um endereço parcial na instrução de ping:

1..254| ForEach-Object -Process {
  Get-CimInstance -Class Win32_PingStatus -Filter ("Address='192.168.1.$_'") } |
    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 outro local. Você pode gerar um conjunto completo de endereços dessa forma:

$ips = 1..254 | ForEach-Object -Process {'192.168.1.' + $_}

Recuperar propriedades do adaptador de rede

Mencionamos anteriormente que você pode recuperar propriedades de configuração geral usando a classe Win32_NetworkAdapterConfiguration. Embora não sejam estritamente informações TCP/IP, informações do adaptador de rede, como endereços MAC e tipos de adaptador podem ser úteis para entender o que está acontecendo com um computador. Para obter um resumo dessas informações, use o seguinte comando:

Get-CimInstance -Class Win32_NetworkAdapter -ComputerName .

Atribuir o domínio DNS a um adaptador de rede

Para atribuir o domínio DNS à resolução de nomes automática, use o método SetDNSDomain de Win32_NetworkAdapterConfiguration. O parâmetro Query de Invoke-CimMethod usa uma cadeia de consulta WQL. O cmdlet chama o método especificado em cada instância retornada pela consulta.

$wql = 'SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=True'
$args = @{ DnsDomain = 'fabrikam.com'}
Invoke-CimMethod -MethodName SetDNSDomain -Arguments $args -Query $wql

A filtragem em IPEnabled=True é necessária, porque mesmo em uma rede que usa apenas TCP/IP, várias das configurações do adaptador de rede em um computador não são adaptadores TCP/IP verdadeiros. São elementos de software gerais que oferecem suporte a RAS, VPN, QoS e outros serviços para todos os adaptadores e, portanto, não têm um endereço próprio.

Executar tarefas de configuração de DHCP

Modificar os detalhes de DHCP envolve trabalhar com um conjunto de adaptadores de rede, assim como na configuração do DNS. Há várias ações distintas que você pode executar usando o WMI.

Encontrar adaptadores habilitados para DHCP

Para localizar os adaptadores habilitados para DHCP em um computador, use o seguinte comando:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=$true"

Para excluir adaptadores com problemas de configuração de IP, você pode recuperar apenas adaptadores habilitados para IP:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=$true and DHCPEnabled=$true"

Recuperar propriedades de DHCP

Como as propriedades relacionadas a DHCP para um adaptador geralmente começam com DHCP, você pode usar o parâmetro Property de Format-Table para exibir somente essas propriedades:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter  "IPEnabled=$true and DHCPEnabled=$true" |
  Format-Table -Property DHCP*

Habilitar o DHCP em cada adaptador

Para habilitar o DHCP em todos os adaptadores, use o seguinte comando:

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE IPEnabled=True and DHCPEnabled=False'
Invoke-CimMethod -MethodName ReleaseDHCPLease -Query $wql

O uso da instrução de filtro IPEnabled=True and DHCPEnabled=False evita a habilitação do DHCP quando ele já está habilitado.

Liberar e renovar concessões de DHCP nos adaptadores específicos

As instâncias da classe Win32_NetworkAdapterConfiguration têm os métodos ReleaseDHCPLease e RenewDHCPLease. Ambos são usados da mesma maneira. Em geral, use esses métodos se você só precisar liberar ou renovar endereços para um adaptador em uma sub-rede específica. A maneira mais fácil de filtrar os adaptadores em uma sub-rede é escolher apenas as configurações de adaptador que usam o gateway para essa sub-rede. Por exemplo, o comando a seguir libera todas as concessões DHCP nos adaptadores no computador local que estão obtendo concessões de DHCP do 192.168.1.254:

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE DHCPServer="192.168.1.1"'
Invoke-CimMethod -MethodName ReleaseDHCPLease -Query $wql

A única alteração para renovar uma concessão de DHCP é usar o método RenewDHCPLease em vez do método ReleaseDHCPLease:

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE DHCPServer="192.168.1.1"'
Invoke-CimMethod -MethodName RenewDHCPLease -Query $wql

Observação

Ao usar esses métodos em um computador remoto, lembre-se de que você poderá perder o acesso ao sistema remoto se estiver conectado a ele por meio do adaptador com a concessão liberada ou renovada.

Liberar e renovar concessões de DHCP em todos os adaptadores

Você pode executar liberações ou renovações de endereço DHCP globais em todos os adaptadores usando os métodos Win32_NetworkAdapterConfiguration, ReleaseDHCPLeaseAll e RenewDHCPLeaseAll. No entanto, o comando deve ser aplicado à classe WMI, em vez de um adaptador específico, pois liberações e renovações de concessões globais são executada na classe, não em um adaptador específico. O cmdlet Invoke-CimMethod pode chamar os métodos de uma classe.

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName ReleaseDHCPLeaseAll

Você pode usar o mesmo formato de comando para invocar o método RenewDHCPLeaseAll:

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName RenewDHCPLeaseAll

Criar um compartilhamento de rede

Para criar um compartilhamento de rede, use o método Create de Win32_Share:

Invoke-CimMethod -ClassName Win32_Share -MethodName Create -Arguments @{
    Path = 'C:\temp'
    Name = 'TempShare'
    Type = [uint32]0 #Disk Drive
    MaximumAllowed = [uint32]25
    Description = 'test share of the temp folder'
}

Isso é equivalente ao seguinte comando net share no Windows:

net share tempshare=c:\temp /users:25 /remark:"test share of the temp folder"

Para chamar um método de uma classe WMI que aceita parâmetros, você precisa saber quais parâmetros estão disponíveis e os tipos desses parâmetros. Por exemplo, você pode listar os métodos de Win32_Class com os seguintes comandos:

(Get-CimClass -ClassName Win32_Share).CimClassMethods
Name          ReturnType Parameters                                   Qualifiers
----          ---------- ----------                                   ----------
Create            UInt32 {Access, Description, MaximumAllowed, Name…} {Constructor, Implemented, MappingStrings, Stati…
SetShareInfo      UInt32 {Access, Description, MaximumAllowed}        {Implemented, MappingStrings}
GetAccessMask     UInt32 {}                                           {Implemented, MappingStrings}
Delete            UInt32 {}                                           {Destructor, Implemented, MappingStrings}

Use o comando a seguir para listar os parâmetros do método Create.

(Get-CimClass -ClassName Win32_Share).CimClassMethods['Create'].Parameters
Name            CimType Qualifiers                                  ReferenceClassName
----            ------- ----------                                  ------------------
Access         Instance {EmbeddedInstance, ID, In, MappingStrings…}
Description      String {ID, In, MappingStrings, Optional}
MaximumAllowed   UInt32 {ID, In, MappingStrings, Optional}
Name             String {ID, In, MappingStrings}
Password         String {ID, In, MappingStrings, Optional}
Path             String {ID, In, MappingStrings}
Type             UInt32 {ID, In, MappingStrings}

Você também pode ler a documentação do método Create da classe Win32_Share.

Remover um compartilhamento de rede

É possível remover um compartilhamento de rede com o Win32_Share, mas o processo é ligeiramente diferente da criação de um compartilhamento, pois você precisa recuperar a instância específica a ser removida em vez da classe Win32_Share. O seguinte exemplo exclui o compartilhamento TempShare:

$wql = 'SELECT * from Win32_Share WHERE Name="TempShare"'
Invoke-CimMethod -MethodName Delete -Query $wql

Conectar a uma unidade de rede acessível do Windows

O cmdlet New-PSDrive pode criar uma unidade do PowerShell mapeada para um compartilhamento de rede.

New-PSDrive -Name "X" -PSProvider "FileSystem" -Root "\\Server01\Public"

No entanto, as unidades criadas dessa maneira só estão disponíveis para a sessão do PowerShell em que são criadas. Para mapear uma unidade que está disponível fora do PowerShell (ou para outras sessões do PowerShell), você precisará usar o parâmetro Persist.

New-PSDrive -Persist -Name "X" -PSProvider "FileSystem" -Root "\\Server01\Public"

Observação

Unidades mapeadas persistentemente podem não estar disponíveis durante a execução em um contexto de privilégios elevados. Esse é o comportamento padrão do UAC do Windows. Para obter mais informações, consulte o seguinte artigo: