Powershell obtient l'adresse ipv4 dans une variable

est-ce qu'il y a un moyen facile dans powershell 3.0 Windows 7 pour obtenir l'adresse ipv4 de l'ordinateur local dans une variable?

18
demandé sur developer747 2014-12-03 20:14:38

7 réponses

Voici une autre solution:

$env:HostIP = ( `
    Get-NetIPConfiguration | `
    Where-Object { `
        $_.IPv4DefaultGateway -ne $null `
        -and `
        $_.NetAdapter.Status -ne "Disconnected" `
    } `
).IPv4Address.IPAddress
18
répondu Lucas 2017-06-21 19:51:07

Comment à ce sujet? (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 qu'utiliser localhost ne ferait que revenir et 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 étendu 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
17
répondu Jana Sattainathan 2016-02-12 16:42:44

Si j'utilise le nom de la machine, cela fonctionne. Mais est un peu comme un hack (parce que je suis juste en train de choisir la première valeur de l'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 trop

$localIpAddress=((ipconfig | findstr [0-9].\.)[0]).Split()[-1]
10
répondu developer747 2014-12-11 20:52:04

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 comme

  • exécuter la commande ipconfig - obtenir tous l'interface réseau de l'information
  • utiliser powershell est là filtre avec une expression régulière
  • regular expression trouve la ligne avec "IPv4" et un ensemble de 4 blocs chacun avec 1-3 chiffres séparés par des périodes, i.e. une adresse IP v4
  • ignorez la sortie en la pipant à null
  • enfin obtenir le premier groupe apparié, comme défini par les parenthèses dans l'expression régulière.
  • attrapez cette sortie en $ipaddress pour une utilisation ultérieure.
6
répondu rob 2016-07-04 13:09:28

une autre variante utilisant $env variable d'environnement pour saisir le nom d'hôte:

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

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

(Test-Connection -ComputerName $env:computername -count 1).IPV4Address.ipaddressTOstring
4
répondu Nicholas Leader 2017-07-21 15:37:24
(Get-WmiObject -Class Win32_NetworkAdapterConfiguration | where {$_.DefaultIPGateway -ne $null}).IPAddress | select-object -first 1
2
répondu Nick Ali 2018-04-19 09:21:38

j'ai récemment eu le même problème. J'ai donc écrit un script pour l'analyser à partir de la ipconfig /all sortie. Ce script est facilement modifiable pour obtenir les paramètres des interfaces et il fonctionne sur Windows 7 aussi.

  1. Obtenir la sortie de l'IP config LineNumber | Line format

$ip_config = $(ipconfig /all | % {$_ -split "rn"} | Select-String -Pattern ".*" | select LineNumber, Line)

  1. Obtenir la liste des interfaces (+ dernière ligne de ipconfig sortie)LineNumber | Line format

$interfaces = $($ip_config | where {$_.Line -notmatch '^\s*$'} | where {$_.Line -notmatch '^\s'}) + $($ip_config | Select -last 1)

  1. filtrer dans la liste des interfaces pour l'interface spécifique que vous voulez

$LAN = $($interfaces | where {$_.Line -match 'Wireless Network Connection:$'})

  1. récupérez les numéros de ligne de début et de fin de l'interface choisie à partir de la sortie

$i = $interfaces.IndexOf($LAN)

$start = $LAN.LineNumber

$end = $interfaces[$i+1].LineNumber

  1. choisissez les lignes à partir de start..end

$LAN = $ip_config | where {$_.LineNumber -in ($start..$end)}

  1. obtenir IP(v4) champ Adresse (renvoie null si aucune adresse IPv4 n'est présente)

$LAN_IP = @($LAN | where {$_ -match 'IPv4.+:\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'})

$LAN_IP = &{If ($LAN_IP.Count -gt 0) {$Matches[1]} Else {$null}}

0
répondu Suraj Iyer 2018-05-22 13:28:01