在Powershell中使用nslookup获取主机名的IP地址

时间:2013-08-07 11:29:29

标签: powershell ip hostname nslookup

我是Powershell脚本的新手,我需要编写一个脚本。我有一个服务器主机名列表,我需要获取这些服务器的IP地址并将结果写入文件。

主机名是Excel电子表格中的一列,但我可以将它们格式化为任何内容(csv,每行有一个主机名的简单txt文件等)。

我想格式化输出的方式是服务器的主机名和每行的IP地址(因此,如果服务器有多个IP,则有多行)。

到目前为止,我一直在使用每行主机名的简单文本文件,但是从PS的输出中我无法区分IP地址所用的服务器。

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

所以我想知道从csv文件加载主机名并再次将主机名和相关IP地址打印到另一个csv,但我不确定如何。

我正在研究通过在foreach中运行nslookup $ server来捕获所需信息(主机名和IP)的可能性。

有人可以帮我一把吗?

谢谢。

5 个答案:

答案 0 :(得分:9)

可以在循环内完成将主机名组合到地址。由于主机可以有多个IP地址,因此您也需要将其设置为accout。这将创建另一个循环。像这样,

$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
  }
}

答案 1 :(得分:3)

这将显示" 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 
    }
}

答案 2 :(得分:1)

您还可以在具有“get-ADcomputer”cmdlet的Foreach-object循环中使用nslookup,假设您具有一致的命名约定/计算机位于AD中。

'Select-Object -unique'可以很好地去除除结果中查询的DC之外的所有实例。

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

答案 3 :(得分:0)

我刚刚使用了" Nicholas Leader"提供的cmdlet

它为每个以XX-

开头的计算机的每个IP地址返回一个响应

奖励!

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

答案 4 :(得分:-1)

#!/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