PowerShell: Получить список DNS имен по списку IP адресов (и наоборот)
В повседневной работе, регулярно приходилось сталкиваться с ситуацией, когда на входе имеется список из ip адресов, по которым необходимо провести какие-то операции: обновление, удаление, перезагрузка, выключение. При этом, сами ip адреса без DNS имен не информативны. И вот встает задача, получить из списка IP адресов список, в котором для каждого IP адреса сделана попытка получить его DNS имя. И уже по имени сервера, можно понимать, что это за сервер, кто за него ответственный, какие операции с ним можно выполнять и в какое время.
На входе: есть файл, в котором в одну колонку перечислены ip адреса. Файл с названием: ip.txt
На выходе: надо получить файл, имеющий 2 колонки: IP адрес, DNS имя сервера (если оно найдено). Результат записать в файл с названием: ipdns.txt c запятой в качестве разделителя.
Один из примеров реализации для PowerShell начиная с версии Windows 8/Windows 2012
В ранних версия PowerShell вместо команды:
рекомендовалось использовать командлет:
Получаем из списка IP адресов список DNS имен
Итак, задача сводится к следующему:На входе: есть файл, в котором в одну колонку перечислены ip адреса. Файл с названием: ip.txt
На выходе: надо получить файл, имеющий 2 колонки: IP адрес, DNS имя сервера (если оно найдено). Результат записать в файл с названием: ipdns.txt c запятой в качестве разделителя.
Один из примеров реализации для PowerShell начиная с версии Windows 8/Windows 2012
$ipaddress=Get-Content -Path C:\Temp\ip.txt # Читаем содержимое файла
$results = @()
ForEach ($ip in $ipaddress)
{ # Обрабатываем построчно, для каждого IP
$obj=new-object psobject
$hostname = ""
#Выполняем разрешение IP адреса в DNS имя
$hostname = Resolve-DnsName -Name $ip -Type PTR -ErrorAction SilentlyContinue
# записываем в объект полученным результат
$obj | Add-Member -MemberType NoteProperty -Name ip -Value ($ip)
$obj | Add-Member -MemberType NoteProperty -Name hostname -Value ($hostname.NameHost)
#Формируем массив объектов
$results +=$obj
}
# Выводим результат в файл
$results | Select-Object -Property ip, hostname | Export-Csv C:\temp\ipdns.txt -Encoding UTF8 -Delimiter "," -NoTypeInformation
В ранних версия PowerShell вместо команды:
Resolve-DnsName -Name $ip -Type PTR
рекомендовалось использовать командлет:
[System.Net.Dns]::GetHostByAddress($ip)
Получаем из списка DNS имен список IP адресов
В случае, если стоит обратная задача, из списка DNS имен, получить список ip адресом, то слегка меняем исходный текст и получаем, следующий скрипт:$dnsnames=Get-Content -Path C:\Temp\dns.txt # Читаем содержимое файла
$results = @()
ForEach ($dns in $dnsnames)
{ # Обрабатываем построчно, для каждого DNS имени
$obj=new-object psobject
$ip = ""
#Выполняем разрешение DNS имени в IP адрес
$ip = Resolve-DnsName -Name $dns -Type A -ErrorAction SilentlyContinue
# записываем в объект полученным результат
$obj | Add-Member -MemberType NoteProperty -Name dns -Value ($dns)
$obj | Add-Member -MemberType NoteProperty -Name ip -Value ($ip.IPAddress)
#Формируем массив объектов
$results +=$obj
}
# Выводим результат в файл
$results | Select-Object -Property dns, ip | Export-Csv C:\temp\ip.txt -Encoding UTF8 -Delimiter "," -NoTypeInformation
В этом случае исходным файл с dns именами называется dns.txt, а целевой ip.txtПохожие статьи:
21 апрель 2020, Вторник
Как определить версию и редакцию SQL сервера
05 февраль 2020, Среда
Пустые VMDK диски виртуальной машины VMware
07 январь 2019, Понедельник
Как включить RDP на удаленной машине?
13 октябрь 2018, Суббота
Как определить размер таблиц в БД MySQL
01 сентябрь 2018, Суббота
PowerShell: Разрешить список IP адресов в DNS имена
26 март 2018, Понедельник
Как определить количество соединений в MySQL
25 декабрь 2017, Понедельник
Рекомендации перед использование VMware vCenter Converter Standalone
Комментарии: