2014-06-12 82 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