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?
7 réponses
Voici une autre solution:
$env:HostIP = ( `
Get-NetIPConfiguration | `
Where-Object { `
$_.IPv4DefaultGateway -ne $null `
-and `
$_.NetAdapter.Status -ne "Disconnected" `
} `
).IPv4Address.IPAddress
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
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]
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.
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
(Get-WmiObject -Class Win32_NetworkAdapterConfiguration | where {$_.DefaultIPGateway -ne $null}).IPAddress | select-object -first 1
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.
- Obtenir la sortie de l'IP config
LineNumber | Line
format
$ip_config = $(ipconfig /all | % {$_ -split "
rn"} | Select-String -Pattern ".*" | select LineNumber, Line)
- 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)
- filtrer dans la liste des interfaces pour l'interface spécifique que vous voulez
$LAN = $($interfaces | where {$_.Line -match 'Wireless Network Connection:$'})
- 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
- choisissez les lignes à partir de
start..end
$LAN = $ip_config | where {$_.LineNumber -in ($start..$end)}
- 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}}