web-dev-qa-db-fra.com

Powershell récupère l'adresse ipv4 dans une variable

Existe-t-il un moyen simple dans powershell 3.0 Windows 7 d’obtenir l’adresse ipv4 de l’ordinateur local dans une variable?

21
developer747

Voici une autre solution:

$env:HostIP = (
    Get-NetIPConfiguration |
    Where-Object {
        $_.IPv4DefaultGateway -ne $null -and
        $_.NetAdapter.Status -ne "Disconnected"
    }
).IPv4Address.IPAddress
23
Lucas

Que dis-tu de ça? (pas ma vraie adresse IP!)

PS C:\> $ipV4 = Test-Connection -ComputerName (hostname) -Count 1  | Select IPV4Address

PS C:\> $ipV4

IPV4Address                                                  
-----------
192.0.2.0

Notez que l'utilisation de localhost ne ferait que renvoyer et une adresse IP de 127.0.0.1

PS C:\> $ipV4 = Test-Connection -ComputerName localhost -Count 1  | Select IPV4Address

PS C:\> $ipV4

IPV4Address                                                             
-----------                                                  
127.0.0.1

L'objet Adresse IP doit être développé pour obtenir la chaîne d'adresse

PS C:\> $ipV4 = Test-Connection -ComputerName (hostname) -Count 1  | Select -ExpandProperty IPV4Address 

PS C:\> $ipV4

Address            : 556228818
AddressFamily      : InterNetwork
ScopeId            : 
IsIPv6Multicast    : False
IsIPv6LinkLocal    : False
IsIPv6SiteLocal    : False
IsIPv6Teredo       : False
IsIPv4MappedToIPv6 : False
IPAddressToString  : 192.0.2.0


PS C:\> $ipV4.IPAddressToString
192.0.2.0
20
Jana Sattainathan

Si j'utilise le nom de la machine, cela fonctionne. Mais c'est un peu comme un bidouillage (parce que je choisis juste la première valeur d'adresse ipv4 que je reçois.)

$ipaddress=([System.Net.DNS]::GetHostAddresses('PasteMachineNameHere')|Where-Object {$_.AddressFamily -eq "InterNetwork"}   |  select-object IPAddressToString)[0].IPAddressToString

Notez que vous devez remplacer la valeur PasteMachineNameHere dans l'expression ci-dessus.

Cela fonctionne aussi

$localIpAddress=((ipconfig | findstr [0-9].\.)[0]).Split()[-1]
9
developer747

Voici ce que j'ai fini par utiliser

$ipaddress = $(ipconfig | where {$_ -match 'IPv4.+\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' } | out-null; $Matches[1])

qui se décompose en

  • execute ipconfig command - Obtenir toutes les informations sur l'interface réseau
  • utiliser le filtre powershell where avec une expression régulière
  • expression régulière trouve la ligne avec "IPv4" et un ensemble de 4 blocs de 1 à 3 chiffres séparés par des points, c'est-à-dire une adresse IP v4
  • ignorer la sortie en la dirigeant vers null
  • enfin, obtenez le premier groupe correspondant défini par les crochets dans l'expression régulière.
  • attraper cette sortie dans $ ipaddress pour une utilisation ultérieure.
5
rob
(Get-WmiObject -Class Win32_NetworkAdapterConfiguration | where {$_.DefaultIPGateway -ne $null}).IPAddress | select-object -first 1
5
Nick Ali

Une autre variante utilisant la variable d'environnement $env pour récupérer le nom d'hôte:

Test-Connection -ComputerName $env:computername -count 1 | Select-Object IPV4Address

ou si vous voulez juste l'adresse IP retournée sans l'en-tête de la propriété

(Test-Connection -ComputerName $env:computername -count 1).IPV4Address.ipaddressTOstring
3
Nicholas Leader

Ce one liner vous donne l'adresse IP:

(Test-Connection -ComputerName $env:computername -count 1).ipv4address.IPAddressToString

Inclure dans une variable?

$IPV4=(Test-Connection -ComputerName $env:computername -count 1).ipv4address.IPAddressToString
2
icey