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:
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de