Получение IP-адресов для имен хостов с помощью nslookup в Powershell

Я новичок в сценариях Powershell, и мне нужно написать один сценарий. У меня есть список имен серверов, и мне нужно получить IP-адреса этих серверов и записать результаты в файл.

Имена хостов - это один столбец в электронной таблице Excel, но я могу отформатировать их во что угодно (csv, простой текстовый файл с одним именем хоста в строке и т. Д.).

Я хотел бы отформатировать вывод так, как там есть имя хоста сервера и его IP-адрес на строку (поэтому существует несколько строк на случай, если у сервера более одного IP-адреса).

До сих пор я использовал простой текстовый файл с именем хоста в строке, но по выводу в PS я не могу отличить, для какого сервера предназначен IP-адрес.

$servers = get-content "path_to_the_file" 
foreach ($server in $servers) {
[System.Net.Dns]::GetHostAddresses($server)
}

Поэтому мне было интересно узнать о загрузке имен хостов из CSV-файла и повторной печати имен хостов и связанных IP-адресов в другой CSV, но я не уверен, как это сделать.

Я изучаю возможность сбора необходимой информации (имя хоста и IP), запустив nslookup $server в foreach.

Может ли кто-нибудь помочь мне?

Спасибо.

5 ответов

Объединение имен хостов с адресами может быть выполнено в цикле. Поскольку у хоста может быть несколько IP-адресов, вы должны принять это во внимание. Это создаст еще один цикл. Вот так,

$servers = get-content "path_to_the_file"
foreach ($server in $servers) {
  $addresses = [System.Net.Dns]::GetHostAddresses($server)
  foreach($a in $addresses) {
    "{0},{1}" -f $server, $a.IPAddressToString
  }
}

Будет отображаться "IP не может быть разрешен", если нет записи DNS.

$servers = get-content "path_to_the_file"e
foreach ($Server in $Servers)
{
    $Addresses = $null
    try {
        $Addresses = [System.Net.Dns]::GetHostAddresses("$Server").IPAddressToString
    }
    catch { 
        $Addresses = "Server IP cannot resolve."
    }
    foreach($Address in $addresses) {
        write-host $Server, $Address 
    }
}

Вы также можете использовать nslookup в цикле Foreach-object с командлетом get-ADcomputer, предполагая, что у вас есть согласованное соглашение об именах / компьютеры находятся в AD.

'Select-Object -unique' делает хорошую работу по удалению всех, кроме одного экземпляра DC, который был запрошен в результатах.

get-adcomputer -Filter {name -like 'nameOfComputer*'} | ForEach-Object 
{nslookup $_.name} | Select-Object -Unique

Я просто использовал cmdlet предоставлено "Николас Лидер".

Он возвращал ответ с каждым IP-адресом для каждой машины, которая начинается с XX-

Престижность!

get-adcomputer -Filter {name -like 'XX-*'} | ForEach-Object {nslookup $_.name} | Select-Object -Unique  
#!/usr/bin/env bash
echo "############# Reverse DNS ##############"
while read id servername;do
    ip=$(nslookup $servername | grep ^Name -A1 | grep Address | awk '{printf ($2" ")}');
    echo "$id,$servername,$ip";
done<$1 >$2
Другие вопросы по тегам