4

我是 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)的可能性。

有人可以帮帮我吗?

谢谢你。

4

4 回答 4

11

将主机名与地址组合可以在循环中完成。由于主机可以有多个 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
  }
}
于 2013-08-07T13:08:08.967 回答
3

如果没有 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 
    }
}
于 2015-11-14T00:55:50.903 回答
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
于 2017-07-06T15:13:59.330 回答
0

我只是使用了cmdlet“Nicholas Leader”提供的。

它返回了一个响应,其中包含以开头的每台机器的每个 IP 地址XX-

赞!

get-adcomputer -Filter {name -like 'XX-*'} | ForEach-Object {nslookup $_.name} | Select-Object -Unique  
于 2017-09-14T21:59:08.570 回答