windows powershell-v3.0

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.

  1. Obtener salida de configuración de IP en LineNumber | Line Formato de LineNumber | Line

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

  1. Obtenga la lista de interfaces (+ última línea de salida de ipconfig ) en LineNumber | Line Formato de LineNumber | Line

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

  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:$''})

  1. 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

  1. Elige las líneas desde el start..end

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

  1. 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