Estoy tratando de obtener la dirección IP de un nombre de host usando Powershell, pero realmente no puedo entender cómo.Resolviendo la dirección IP del nombre de host con PowerShell
¿Algún ayuda?
Estoy tratando de obtener la dirección IP de un nombre de host usando Powershell, pero realmente no puedo entender cómo.Resolviendo la dirección IP del nombre de host con PowerShell
¿Algún ayuda?
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.
$ ip = [System.Net.Dns] :: GetHostAddresses ("yourhosthere") [0] se asegurará de que obtenga solo una dirección IP si está seguro de que resuelve –
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.
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
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 .
¿Por qué tiene $ antes ($ ping.Send .......? –
@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 ... –
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."}
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
como la pregunta es para powershell esperaría que la respuesta fuera una cadena/objeto que contiene la dirección IP – rob
Esto funcionó bien para mi propósito
$ping = ping -4 $env:COMPUTERNAME
$ip = $ping.Item(2)
$ip = $ip.Substring(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!
Best answe aquí! – gvee
Bajo el capó ¿cómo se diferencia esto a [System.Net.Dns] :: GetHostAddresses? – Castrohenge
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. –
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
$computername = $env:computername
[System.Net.Dns]::GetHostAddresses($computername) | where {$_.AddressFamily -notlike "InterNetworkV6"} | foreach {echo $_.IPAddressToString }
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
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
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
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)
}
El comando Test-Conexión parece que hay una alternativa útil, y puede proporcionar un objeto Win32_PingStatus o un valor booleano.
Documentación: https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.management/test-connection
No tener una máquina de las ventanas no puedo estar seguro, pero tampoco es nslookup o dig disponibles? –