2014-06-12 58 views
0

我试图从server.txt中定义的几个服务器获取IP地址列表。从相同的FQDN获取两个ipaddress

每台服务器有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 

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

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

+1

这只是个人意见,但我想用**的foreach **应避免**的foreach对象的别名,将其从区分** foreach **控制结构。他们有类似的目的,但基本的差异使得重要的是不要将它们彼此混淆。您可以使用**%**作为** ForEach-Object **的缩写。 –

回答

1

您似乎认为

$server2="$servers-bck" 

将追加-bck每个元素的名称数组$servers英寸事实并非如此。

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

要获得备份服务器从你的列表中,您需要附加-bck内的每个服务器:相反,该阵列是通过使用output field separator,使-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" 
+0

这有助于解决我的问题。它非常有帮助。即时通讯新的PowerShell,因此我总是最终犯这个错误。 – Darkbishop