PowerShell: Разрешить список IP адресов в DNS имена

01 сентябрь 2018, Суббота
4 533
0
0 0
Написал небольшой PowerShell скрипт, который по CSV файлу содержащему список IP адресов, возвращает список состоящий из IP адреса и соответствующему ему DNS имени. На вход скрипта подается файл, содержащий в одной из колонок (или состоящей только из одной колонки) с названием колонки IP, например:
IP
77.88.8.1
77.88.8.2
8.8.4.4 
8.8.8.8
666.6.6.6
255.255.255.255
Результат скрипта может быть выведен на экран, либо в новый CSV файл. Результат скрипта будет выглядеть следующим образом:
"IP","DNS"
"77.88.8.1","secondary.dns.yandex.ru"
"77.88.8.2","secondary.safe.dns.yandex.ru"
"8.8.4.4","google-public-dns-b.google.com"
"8.8.8.8","google-public-dns-a.google.com"
"666.6.6.6","No such host is known"
"255.255.255.255","No such host is known"
Для IP адресов, для которых не нашлось PTR записи, будет выведен текст: "No such host is known"
$listIP = @()
# Получаем список IP адресов из CSV файла

$listIP = Import-Csv "c:\temp\Process\ListIP.csv"

#$listIP # проверка импортированных данных

$ListIPandDNS = @()

# в Цикле разрешаем IP в DNS имя
foreach ($ip in $listIP)
{
    $DNS = $null
    try 
    {
        $DNS = [System.Net.Dns]::gethostentry($ip.IP.Trim()) # разрешаем IP в DNS имя, удалив лишние пробелы
    }
    catch
    {
        Write-Host "For IP: " $ip.IP "Error: " $_.Exception.Message | fl
        $Exception = $_.Exception.Message
        $ErrorMessage = (($Exception  -split ': ') -replace '"')[1]
    }

        $IPandDNS = New-Object System.Object
        $IPandDNS | Add-Member -MemberType NoteProperty -Name 'IP' -Value $ip.IP.Trim()

    If ($DNS)
    {
        $IPandDNS | Add-Member -MemberType NoteProperty -Name 'DNS' -Value $DNS.HostName
    }
    else
    {
        $IPandDNS | Add-Member -MemberType NoteProperty -Name 'DNS' -Value $ErrorMessage
    }

    $ListIPandDNS += $IPandDNS
}

$ListIPandDNS # Вывод на экран результата

$ListIPandDNS | Export-Csv -Path c:\temp\Process\ListIPandDNS.csv -Encoding UTF8 -Delimiter "," -NoTypeInformation # Вывод в CSV файл результата

В случае же, когда требуется выполнить обратную задачу, по списку серверов определить их IP адрес, можно использовать командлет:
[System.Net.Dns]::GetHostAddresses(“DNSname“)
Комментарии:
Прокомментировать
При использовании материалов ссылка на сайт UserMan.ru обязательна.
Политика конфиденциальности
Пользовательское соглашение
UserMan.ru © 2017-2024
Соцсети: VK