我正在尝试从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"
。我不知道如何解决它。
任何想法或建议都会有所帮助。
答案 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"