2013-08-07 124 views
3

我是Powershell脚本编程的新手,我需要编写一个脚本。我有一个服务器主机名列表,我需要获得这些服务器的IP地址,并将结果写入文件。在Powershell中使用nslookup获取主机名的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)的可能性。

有人能帮我一个忙吗?

谢谢。

回答

7

将主机名与地址结合可以在循环内完成。作为一个主机可以有多个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 
    } 
} 
2

如果没有DNS记录,将显示“IP无法解析”。

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

您也可以在foreach对象循环使用nslookup以“get-ADcomputer” cmdlet的,假设你有一个一致的命名约定/计算机在AD。

'Select-Object -unique'做了很好的工作,除去了在结果中查询的所有DC实例。

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

我刚刚使用了由“Nicholas Leader”提供的cmdlet

这回用与XX-

荣誉开始的每个IP地址对每一台机器的响应!

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