Os administradores de TI podem fazer muito com o PowerShell e a linha de comando; trabalhar com a rede do Windows é uma dessas maneiras. Neste tutorial, você aprenderá como usar o PowerShell para obter endereços IP de adaptadores de rede em um computador com Windows usando o cmdlet Get-NetIPAddress
e WMI.
Pré-requisitos
Este tutorial presumirá que você está em um computador com Windows 10 ou superior com o Windows PowerShell v5.1 instalado. Também é assumido que você está em um ambiente de Active Directory. Se não estiver, certifique-se de aprender sobre a Credential
propriedade no cmdlet New-CimSession
.
Usando Get-NetIPAddress
O PowerShell possui vários cmdlets para trabalhar com conexões de rede, como Get-NetAdapter
, Get-NetAdapterBinding
, e até mesmo um especificamente para encontrar endereços IP chamado Get-NetIPAddress
. Se você quiser usar o PowerShell para obter o endereço IP em um script simples, por todos os meios, use esses cmdlets.
Mantenha simples. Se o PowerShell oferecer uma maneira mais simples de fazer algo, faça!
Por exemplo, para encontrar o endereço IPv4 em todos os adaptadores de rede em um computador local, execute uma única linha.

A saída acima faz referência a um adaptador de rede específico, como o adaptador Ethernet, e retorna apenas o endereço IP.

Você terminou! Simplesmente usar o PowerShell para obter um endereço IP é um processo direto, pelo menos muito mais do que usar outros meios.
Se você não é fã do PowerShell, também pode usar o comando ipconfig para obter um endereço IP. Saiba mais sobre ipconfig em Os Comandos Ipconfig que Você Precisa Conhecer.
Por que Usar CIM/WMI?
Quando você executa o cmdlet Get-NetIPAddress
, o PowerShell está, na verdade, consultando o WMI para obter essas informações. Por que é importante saber disso? Porque você pode consultar o WMI diretamente. Mas por que usar o WMI quando você pode usar um único comando?
Uma das razões mais comuns para usar o WMI em vez de um único comando como Get-NetIPAddress
é quando você já está consultando o WMI. O WMI contém muitas informações do sistema que são úteis ao criar scripts para fins de inventário.
Ao se comunicar com o WMI com o PowerShell, você pode criar uma sessão CIM assim como uma sessão PSRemoting. Usar uma sessão é uma maneira eficiente de autenticar-se em um computador uma vez e reutilizar essa conexão repetidamente.
Use CIM para obter um endereço IP quando estiver construindo essa tarefa como parte de um script maior.
Consultando CIM Sem uma Sessão
Ao construir um script PowerShell usando CIM para consultar várias informações, você deve usar uma sessão CIM reutilizável. Reutilizar uma única sessão não apenas acelera seu script, mas também reduz a duplicação de código.
Por exemplo, talvez queira descobrir qual sistema operacional está sendo executado em um computador Windows remoto. CIM armazena o nome do SO em uma propriedade chamada Caption dentro da classe Win32_OperatingSystem. Para obter essas informações, você usaria o Get-CimInstance
cmdlet abaixo, especificando o nome do computador (REMOTECOMPUTER
), a classe CIM (Win32_OperatingSystem
), e referenciando apenas a propriedade Caption
no objeto.
Ao executar Get-CimInstance
, o PowerShell precisa localizar o computador remoto, passar as credenciais de login e finalmente consultar o CIM para obter as informações necessárias. Há muita sobrecarga ao executar Get-CimInstance
sem uma sessão.
E se você estiver criando um script de inventário de servidor e também quiser encontrar informações sobre armazenamento, memória, rede, e assim por diante? Nesse caso, você teria muitos comandos Get-CimInstance
como abaixo.
Seu script se conectará ao REMOTECOMPUTER
quatro vezes no trecho de código acima, e se o nome do computador mudar? Você terá que encontrar/substituir esse nome de computador, o que nunca é um bom sinal ao programar.
Criando uma Sessão CIM
Em vez de usar Get-CimInstance
com uma sessão, você deve criar uma única sessão CIM com o New-CimSession
cmdlet e reutilizar essa sessão repetidamente.
Em vez de autenticar repetidamente em um computador remoto, crie uma única sessão CIM com New-CimSession
e passe essa sessão para Get-CimInstance
como abaixo.
Depois de terminar com a sessão, desconecte e remova-a da memória.
Usar sessões CIM como acima é uma ótima maneira de trabalhar com CIM/WMI.
Encontrar o Adaptador de Rede Correto
Já que um computador com Windows pode ter diferentes adaptadores de rede, você primeiro precisa limitar qual adaptador de rede gostaria de obter o endereço IP. Ao usar WMI, utilize a classe Win32_NetworkAdapterConfiguration. Esta classe fornece muitas das informações que o Get-NetIPAddress
retorna.
Primeiro, crie um script do PowerShell com o nome do computador remoto, crie uma nova sessão CIM e então adicione sua linha de remoção de sessão CIM abaixo dela.
Depois de desenvolver o código da sessão CIM, insira a consulta WMI.

Você pode ver que a saída padrão acima não mostra o endereço IP. Você precisará investigar um pouco mais fundo. Também não retorna uma única instância. Como você limita aquele que tem o endereço IP que está procurando?
Para fazer isso, primeiro exiba todas as propriedades usando Select-Object
.
Role pela saída e você notará alguns adaptadores de rede sem um endereço IP, alguns com um e alguns com vários IPs! Você precisa limitar isso. Você deve encontrar algum critério padrão para filtrar, de modo que possa ser aplicado a todos os servidores.

Em cada adaptador, você deve ver a propriedade IPEnabled
. Quando esta propriedade está definida como True, o protocolo TCP/IP está vinculado a esta NIC, o que é um requisito para ter um endereço IP. Você precisa reduzir as NICs que têm a propriedade IPEnabled
definida como True, e terá o adaptador que está procurando.
Ao filtrar instâncias WMI, é melhor usar o parâmetro Filter
em Get-CimInstance
. Há um lema na comunidade do PowerShell que diz “filtrar à esquerda”. Se tiver a oportunidade, isso significa sempre filtrar a saída o mais à esquerda possível.
Não use Where-Object
a menos que seja necessário. O desempenho será muito mais rápido devido à falta de processamento desnecessário de objetos ao longo do pipeline.
O parâmetro Filter
em Get-CimInstance
usa Windows Query Language (WQL). WQL é um pequeno subconjunto do SQL. O parâmetro Filter
espera a mesma sintaxe de cláusula de restrição WHERE que o SQL usaria.
Para encontrar todas as instâncias CIM da classe Win32_NetworkAdapterConfiguration com a propriedade IPEnabled definida como True, use a consulta WQL SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'True'
.
Já que estamos especificando o nome da classe para o argumento do parâmetro ClassName
em Get-CimInstance
, precisamos especificar IPEnabled = 'True'
para o Filter
. Isso retornará apenas o adaptador de rede com o endereço IP.
Ao executar o trecho de código acima, você deverá ver que Get-CimInstance
retorna apenas uma única (ou conjunto limitado) de instâncias.
Agora que você tem uma única instância CIM e conhece a propriedade que está procurando (IPAddress
), vejamos como ela se parece. Você verá abaixo que, neste exemplo, retorna uma única instância CIM, mas com três strings para a propriedade IPAddress
, incluindo endereços IPV6.
Você precisará filtrar mais alguns elementos. Como o WQL não pode filtrar mais fundo do que o valor da propriedade IPAddress
, agora você deve analisar o endereço IPv4.
O endereço IPV4 é geralmente o primeiro definido no array. Escolha esse usando a referência ao índice 0, como mostrado abaixo. Quando fizer isso, verá que retorna apenas uma única string de endereço IP IPV4.
O endereço IPV4 pode nem sempre ser o primeiro elemento do array. Na verdade, a propriedade IPAddress pode nem mesmo ser um array. As configurações de IP variam drasticamente entre adaptadores e várias configurações. Você pode ter que ser criativo ao filtrá-las.
Conclusão
Se você precisar usar o PowerShell para obter um endereço IP de um computador, primeiro dê uma olhada no cmdlet Get-NetIPAddress
. Se estiver construindo um script maior ou não puder executar esse comando por algum motivo, considere usar Get-CimInstance
e uma sessão CIM para fazer o trabalho sujo.
Source:
https://adamtheautomator.com/powershell-get-ip-address/