从同一个FQDN获取两个ipaddress

时间:2014-06-12 07:35:09

标签: powershell

我正在尝试从server.txt中定义的多个服务器获取IP地址列表。

每台服务器有2个IP地址和2个FQDN。

示例:

servername (Production lan):server1 IPaddress:147.111.111.16
servername (backup lan):server1-bck IPaddress:10.0.4.12

以下是我使用的代码:

$servers = Get-Content server.txt
$server2 = "$servers-bck"
$zai = ""
foreach ($server in $servers)
{
  $zai = $zai + $server + "`t" +
    ([System.Net.Dns]::GetHostAddresses($server) | foreach {echo $_.IPAddressToString}) +
    "`t" +
    ([System.Net.Dns]::GetHostAddresses($server2) | foreach {echo $_.IPAddressToString}) +
    "`n"
}
$zai > IP-address.csv

不幸的是,只有Production lan的IP是正确的。 backup lan的IP仅显示server.txt中最后一台服务器的IP。我认为问题在于:"foreach { echo $._IPAddressToString"。我不知道如何解决它。

任何想法或建议都会有所帮助。

1 个答案:

答案 0 :(得分:1)

你似乎认为

$server2="$servers-bck"

会将-bck附加到数组$servers中每个元素的名称。事实并非如此。相反,通过使用output field separator连接其元素来扩展数组,以便-bck在最后一个数组元素之后结束:

PS C:\> $a = 'a', 'b', 'c'
PS C:\> $a
a
b
c
PS C:\> "$a-bck"
a b c-bck

要从列表中获取每个服务器的备份服务器,您需要在循环中附加-bck

...([System.Net.Dns]::GetHostAddresses("$server-bck"))...

作为旁注,您不应手动构建CSV。让PowerShell为您做到这一点:

$servers | % {
  New-Object -Type PSObject -Property @{
    'Name'       = $_
    'Production' = ([Net.Dns]::GetHostAddresses($_) | select -Expand IPAddressToString) -join ' '
    'Backup'     = ([Net.Dns]::GetHostAddresses("$_-bck") | select -Expand IPAddressToString) -join ' '
  }
} | Export-Csv 'IP-address.csv' -NoType -Delimiter "`t"