2011-12-28 26 views

Respuesta

43

Si desea obtener la dirección IP para que pueda trabajar con la dirección, se puede hacer esto:

$ips = [System.Net.Dns]::GetHostAddresses("yourhosthere") 

Usted puede iterar sobre ellos, así:

[System.Net.Dns]::GetHostAddresses("yourhosthere") | foreach {echo $_.IPAddressToString } 

un servidor puede tener más de una IP, por lo que devolverá una matriz de direcciones IP.

+3

$ ip = [System.Net.Dns] :: GetHostAddresses ("yourhosthere") [0] se asegurará de que obtenga solo una dirección IP si está seguro de que resuelve –

3

Obtener direcciones IPv4 e IPv6 del nombre de host en powershell se explica here. Además, puede obtener el script haciendo clic en Resolve IP address from Hostname en el artículo mencionado anteriormente.

+1

enlaces que puede que no estén disponibles en el futuro, por favor incluya core componentes en su respuesta y solo usa enlaces para "más información" – rob

5

Usaría la solución vcsjones comentada, pero dado que el resultado de su solución cuando se usa en un nombre de host que tiene múltiples direcciones IP sería una matriz de direcciones IP, esto causaría problemas con más ping/tracert.

La solución que uso es el siguiente:

$ping = New-Object System.Net.NetworkInformation.Ping 
$ips = $($ping.Send("yourhosthere").Address).IPAddressToString 

Esto mostraría una única cadena de IP (en la variable $ips), resuelta a partir de una única respuesta ICMP, la prevención de una serie de direcciones IP para los nombres de host con varias direcciones IP .

+0

¿Por qué tiene $ antes ($ ping.Send .......? –

+0

@Backwards_Dave, aparentemente mi hábito de usar paréntesis para agrupar un elemento ha terminado excesivo aquí. La siguiente línea actualizada le ofrece el mismo resultado, sin el $ (...) adicional: $ ips = $ ping.Enviar ("yourhosthere"). Address.IPAddressToString Gracias por preguntar. Menos es más ... –

1

Si conoce parte de la subred (es decir, 10,3 en este ejemplo), entonces esto va a agarrar todas las direcciones que se encuentran en la subred determinada:

PS C:\> [System.Net.Dns]::GetHostAddresses("MyPC") | foreach { $_.IPAddressToString | findstr "10.3."} 
1

La forma más sencilla:

ping hostname 

p.ej

ping dynlab938.meng.auth.gr 

se imprimirá: Hacer ping dynlab938.meng.auth.gr [155.207.29.38] con 32 bytes de datos

+0

como la pregunta es para powershell esperaría que la respuesta fuera una cadena/objeto que contiene la dirección IP – rob

0

Esto funcionó bien para mi propósito

$ping = ping -4 $env:COMPUTERNAME 
$ip = $ping.Item(2) 
$ip = $ip.Substring(11,11) 
11

esto es agradable y simple y obtiene todos los nodos.

$ip = Resolve-DNSName google.com 
$ip 

también intentan introducir una dirección IP en lugar de un nombre de dominio y echa un vistazo a los resultados también!

+0

Best answe aquí! – gvee

+0

Bajo el capó ¿cómo se diferencia esto a [System.Net.Dns] :: GetHostAddresses? – Castrohenge

+0

Si desea acceder solo a la dirección IP utilizando este método, use $ ip.IPAddress. Tenga en cuenta que esto devolverá una matriz si hay múltiples direcciones IP. –

1

un trazador de líneas de trabajo si quieres un resultado único de la colección:

$ipAddy = [System.Net.Dns]::GetHostAddresses("yahoo.com")[0].IPAddressToString; 

hth

0
$computername = $env:computername  
[System.Net.Dns]::GetHostAddresses($computername) | where {$_.AddressFamily -notlike "InterNetworkV6"} | foreach {echo $_.IPAddressToString } 
+1

Si bien este código puede responder a la pregunta, proporcionar un contexto adicional con respecto a por qué y/o cómo responde este código a la pregunta mejora su valor a largo plazo. – JAL

4

Uso Resolve-DnsName cmdlet.

Resolve-DnsName computername | FT Name, IPAddress -HideTableHeaders | Out-File -Append c:\filename.txt 

PS C:\> Resolve-DnsName stackoverflow.com 

Name           Type TTL Section IPAddress 
----           ---- --- ------- --------- 
stackoverflow.com        A  130 Answer  151.101.65.69 
stackoverflow.com        A  130 Answer  151.101.129.69 
stackoverflow.com        A  130 Answer  151.101.193.69 
stackoverflow.com        A  130 Answer  151.101.1.69 

PS C:\> Resolve-DnsName stackoverflow.com | Format-Table Name, IPAddress -HideTableHeaders 

stackoverflow.com 151.101.65.69 
stackoverflow.com 151.101.1.69 
stackoverflow.com 151.101.193.69 
stackoverflow.com 151.101.129.69 

PS C:\> Resolve-DnsName -Type A google.com 

Name           Type TTL Section IPAddress 
----           ---- --- ------- --------- 
google.com          A  16 Answer  216.58.193.78 


PS C:\> Resolve-DnsName -Type AAAA google.com 

Name           Type TTL Section IPAddress 
----           ---- --- ------- --------- 
google.com          AAAA 223 Answer  2607:f8b0:400e:c04::64 
+1

Si bien este código puede responder a la pregunta, proporcionar un contexto adicional con respecto a por qué y/o cómo responde este código a la pregunta mejora su valor a largo plazo. – Jack

0

Puede utilizar este código si usted tiene un montón de anfitriones en archivo de texto

$a = get-content "C:\Users\host.txt"(file path) 

foreach ($i in $a) 
    { 
$i + "`n" + "==========================";[System.Net.Dns]::GetHostAddresses($i) 

} 
Cuestiones relacionadas