Я пытаюсь получить ipaddress из имени хоста, используя Powershell, но я действительно не могу понять, как это сделать.
Любая помощь?
Я пытаюсь получить ipaddress из имени хоста, используя Powershell, но я действительно не могу понять, как это сделать.
Любая помощь?
Если вы хотите получить IP-адрес, чтобы вы могли работать с адресом, вы можете сделать это:
$ips = [System.Net.Dns]::GetHostAddresses("yourhosthere")
Вы можете перебирать их так:
[System.Net.Dns]::GetHostAddresses("yourhosthere") | foreach {echo $_.IPAddressToString }
Сервер может иметь более одного IP-адреса, поэтому он вернет массив IP-адресов.
это хорошо и просто и получает все узлы.
$ip = Resolve-DNSName google.com
$ip
также попробуйте ввести ip вместо имени домена и проверить эти результаты тоже!
Я бы воспользовался решением vcsjones, но, поскольку результат его решения при использовании в имени хоста, который имеет несколько IP-адресов, будет массивом IP-адресов, это вызовет проблемы с дальнейшим ping/tracert.
Решение, которое я использую, следующее:
$ping = New-Object System.Net.NetworkInformation.Ping
$ips = $($ping.Send("yourhosthere").Address).IPAddressToString
Это отображает одну строку IP (в переменной $ips
), разрешенную с одного ответа ICMP, предотвращая массив IP-адресов для имен хостов с несколькими IP-адресами.
Использовать командлет Resolve-DnsName.
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
Получить адреса IPv4 и IPv6 из имени хоста в powershell объясняется здесь. Кроме того, вы можете получить script, нажав Разрешить IP-адрес из Hostname в вышеупомянутой статье.
Если вы знаете часть подсети (т.е. 10.3 в этом примере), тогда она будет захватывать любые адреса, которые находятся в данной подсети:
PS C:\> [System.Net.Dns]::GetHostAddresses("MyPC") | foreach { $_.IPAddressToString | findstr "10.3."}
Самый простой способ:
ping hostname
например.
ping dynlab938.meng.auth.gr
он напечатает: Pinging dynlab938.meng.auth.gr [155.207.29.38] с 32 байтами данных
Работа с одним лайнером, если вы хотите получить один результат из коллекции:
$ipAddy = [System.Net.Dns]::GetHostAddresses("yahoo.com")[0].IPAddressToString;
HTH
Команда Test-Connection кажется полезной альтернативой, и она может либо предоставить объект Win32_PingStatus, либо логическое значение.
Документация: https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.management/test-connection
Это сработало для моей цели
$ping = ping -4 $env:COMPUTERNAME
$ip = $ping.Item(2)
$ip = $ip.Substring(11,11)
$computername = $env:computername
[System.Net.Dns]::GetHostAddresses($computername) | where {$_.AddressFamily -notlike "InterNetworkV6"} | foreach {echo $_.IPAddressToString }
Вы можете использовать этот код, если в текстовом файле есть куча хостов
$a = get-content "C:\Users\host.txt"(file path)
foreach ($i in $a )
{
$i + "`n" + "==========================";[System.Net.Dns]::GetHostAddresses($i)
}