windows - Powershell obtener la dirección ipv4 en una variable
powershell-v3.0 (9)
¿Qué tal esto? (¡No es mi dirección IP real!)
PS C:/> $ipV4 = Test-Connection -ComputerName (hostname) -Count 1 | Select IPV4Address
PS C:/> $ipV4
IPV4Address
-----------
192.0.2.0
Tenga en cuenta que el uso de localhost solo devolvería e 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
El objeto de Dirección IP tiene que expandirse para obtener la cadena de dirección
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
¿Existe una forma fácil en powershell 3.0 Windows 7 para obtener la dirección ipv4 de la computadora local en una variable?
Aquí hay otra solución:
$env:HostIP = (
Get-NetIPConfiguration |
Where-Object {
$_.IPv4DefaultGateway -ne $null -and
$_.NetAdapter.Status -ne "Disconnected"
}
).IPv4Address.IPAddress
Este liner le da la dirección IP:
(Test-Connection -ComputerName $env:computername -count 1).ipv4address.IPAddressToString
¿Incluirlo en una variable?
$IPV4=(Test-Connection -ComputerName $env:computername -count 1).ipv4address.IPAddressToString
Esto es lo que terminé usando
$ipaddress = $(ipconfig | where {$_ -match ''IPv4.+/s(/d{1,3}/./d{1,3}/./d{1,3}/./d{1,3})'' } | out-null; $Matches[1])
que se descompone como
- ejecute el comando ipconfig - obtenga toda la información de la interfaz de red
- Utilice el filtro de powershell con una expresión regular.
- expresión regular encuentra la línea con "IPv4" y un conjunto de 4 bloques cada uno con 1-3 dígitos separados por puntos, es decir, una dirección IP v4
- ignorar la salida canalizando a nulo
- finalmente obtenga el primer grupo coincidente como lo definen los corchetes en la expresión regular.
- captura esa salida en $ ipaddress para su uso posterior.
Hace poco tuve el mismo problema. Así que escribí un script para analizarlo desde la salida ipconfig /all
. Este script es fácilmente modificable para obtener cualquiera de los parámetros de las interfaces y también funciona en Windows 7.
- Obtener salida de configuración de IP en
LineNumber | Line
Formato deLineNumber | Line
$ip_config = $(ipconfig /all | % {$_ -split "
r n"} | Select-String -Pattern ".*" | select LineNumber, Line)
- Obtenga la lista de interfaces (+ última línea de salida de
ipconfig
) enLineNumber | Line
Formato deLineNumber | Line
$interfaces = $($ip_config | where {$_.Line -notmatch ''^/s*$''} | where {$_.Line -notmatch ''^/s''}) + $($ip_config | Select -last 1)
- Filtre a través de la lista de interfaces para la interfaz específica que desea
$LAN = $($interfaces | where {$_.Line -match ''Wireless Network Connection:$''})
- Obtenga los números de línea inicial y final de la interfaz elegida desde la salida
$i = $interfaces.IndexOf($LAN)
$start = $LAN.LineNumber
$end = $interfaces[$i+1].LineNumber
- Elige las líneas desde el
start..end
$LAN = $ip_config | where {$_.LineNumber -in ($start..$end)}
- Campo de dirección Obtener IP (v4) (devuelve nulo si no hay una dirección IPv4 presente)
$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}}
Otra variante que usa la variable de entorno $env
para capturar el nombre de host:
Test-Connection -ComputerName $env:computername -count 1 | Select-Object IPV4Address
o si solo desea que la dirección IP sea devuelta sin el encabezado de la propiedad
(Test-Connection -ComputerName $env:computername -count 1).IPV4Address.ipaddressTOstring
Si utilizo el nombre de la máquina esto funciona. Pero es algo así como un hackeo (porque solo estoy seleccionando el primer valor de la dirección ipv4 que recibo).
$ipaddress=([System.Net.DNS]::GetHostAddresses(''PasteMachineNameHere'')|Where-Object {$_.AddressFamily -eq "InterNetwork"} | select-object IPAddressToString)[0].IPAddressToString
Tenga en cuenta que debe reemplazar el valor PasteMachineNameHere en la expresión anterior
Esto funciona tambien
$localIpAddress=((ipconfig | findstr [0-9]./.)[0]).Split()[-1]
$a = ipconfig
$result = $a[8] -replace "IPv4 Address. . . . . . . . . . . :",""
También verifique qué índice de ipconfig tiene la dirección IPv4
(Get-WmiObject -Class Win32_NetworkAdapterConfiguration | where {$_.DefaultIPGateway -ne $null}).IPAddress | select-object -first 1