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: