Получение 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