Executar tarefas de rede

Este exemplo só se aplica a plataformas Windows.

Como o TCP/IP é o protocolo de rede mais comumente 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 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-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Select-Object -ExpandProperty IPAddress

Como a propriedade IPAddress de um objeto Win32_NetworkAdapterConfiguration é uma matriz, você deve 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 Get-Member cmdlet, 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. As chaves na definição indicam que IPAddress não é um valor System.String , mas uma matriz de valores System.String .

Listando dados de configuração de IP

Para exibir dados detalhados de configuração IP para 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 aprofundada 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, você provavelmente não está interessado nas propriedades IPX ou WINS. Você pode usar o parâmetro ExcludeProperty de Select-Object para ocultar propriedades com nomes que começam com "WINS" ou "IPX".

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

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

Executar ping em computadores

Você pode executar um ping simples em um computador usando o 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'"

Um formulário mais útil para informações resumidas uma exibição das propriedades Address, ResponseTime e StatusCode, conforme gerado pelo comando a seguir. O parâmetro Autosize de redimensiona as colunas da Format-Table tabela para que elas 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 ping em vários computadores com um único comando. Como há mais de um endereço, use o 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 ping em todos os endereços em uma sub-rede, como uma rede privada que usa o número de rede 192.168.1.0 e uma máscara de sub-rede padrão de Classe C (255.255.255.0)., Somente 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 de rede e 255 é um endereço de difusão de sub-rede).

Para representar uma matriz dos números de 1 a 254 no PowerShell, use a expressão 1..254. Um ping de sub-rede completo pode ser executado adicionando cada valor no intervalo a um endereço parcial na instrução 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 gerar um intervalo de endereços também pode ser usada em outros lugares. Você pode gerar um conjunto completo de endereços desta forma:

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

Recuperando propriedades do adaptador de rede

Anteriormente, mencionamos que você poderia recuperar propriedades de configuração geral usando a classe Win32_NetworkAdapterConfiguration . Embora não sejam estritamente informações de TCP/IP, as 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 .

Atribuindo o domínio DNS para um adaptador de rede

Para atribuir o domínio DNS para resolução automática de nomes, use o método SetDNSDomain do Win32_NetworkAdapterConfiguration. O parâmetro Query de usa uma cadeia de caracteres de Invoke-CimMethod 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 é IPEnabled=True necessária, porque mesmo em uma rede que usa apenas TCP/IP, várias das configurações de adaptador de rede em um computador não são adaptadores TCP/IP verdadeiros. eles são elementos gerais de software que suportam RAS, VPN, QoS e outros serviços para todos os adaptadores e, portanto, não têm um endereço próprio.

Executando tarefas de configuração DHCP

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

Localizando 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"

Recuperando propriedades DHCP

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

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

Ativando 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

Usar a instrução IPEnabled=True and DHCPEnabled=False filter evita habilitar o DHCP onde ele já está habilitado.

Liberando e renovando concessões DHCP em adaptadores específicos

Instâncias da classe Win32_NetworkAdapterConfiguration tem ReleaseDHCPLease e RenewDHCPLease métodos. 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 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 em adaptadores no computador local que estão obtendo concessões DHCP de 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 DHCP é usar o RenewDHCPLease método em vez do ReleaseDHCPLease método:

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

Nota

Ao usar esses métodos em um computador remoto, esteja ciente de que você pode perder o acesso ao sistema remoto se estiver conectado a ele através do adaptador com a concessão liberada ou renovada.

Liberando e renovando concessões DHCP em todos os adaptadores

Você pode executar liberações ou renovações de endereços DHCP globais em todos os adaptadores usando os métodos ReleaseDHCPLeaseAll Win32_NetworkAdapterConfiguration e RenewDHCPLeaseAll. No entanto, o comando deve ser aplicado à classe WMI, em vez de um adaptador específico, porque liberar e renovar concessões globalmente é executado na classe, não em um adaptador específico. O Invoke-CimMethod cmdlet 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

Criando um compartilhamento de rede

Para criar um compartilhamento de rede, use o Create método 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 net share comando 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 usa parâmetros, você deve saber quais parâmetros estão disponíveis e os tipos desses parâmetros. Por exemplo, você pode listar os métodos do 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 Create método.

(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 .

Removendo um compartilhamento de rede

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

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

Ligar uma unidade de rede acessível pelo Windows

O New-PSDrive cmdlet 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 onde são criadas. Para mapear uma unidade que está disponível fora do PowerShell (ou para outras sessões do PowerShell), você deve usar o parâmetro Persist .

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

Nota

Unidades mapeadas persistentemente podem não estar disponíveis quando executadas em um contexto elevado. Este é o comportamento padrão do Windows UAC. Para obter mais informações, veja o seguinte artigo: