2014-06-12 2 views
0

server.txt에 정의 된 여러 서버에서 IP 주소 목록을 가져 오려고합니다.동일한 FQDN에서 두 개의 ipaddress 받기

각 서버에는 2 개의 IP 주소와 2 개의 FQDN이 있습니다.

예 : Production lan에 대한 불행하게도에만 IP

$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 

가 올바른지 : 여기

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

내가 사용하고 코드입니다. backup lan의 IP는 server.txt에 마지막 서버의 IP 만 표시합니다. 문제가 있다고 가정합니다 : "foreach { echo $._IPAddressToString". 나는 그것을 고치는 법을 모른다.

어떤 아이디어 나 조언이 도움이 될 것입니다.

+1

이것은 개인적인 견해 일 뿐이며, ** ForEach-Object **의 foreach ** 별칭을 사용하면 피하는 것이 좋습니다. **와 구별해야합니다. foreach ** 제어 구조. 그것들은 비슷한 목적을 가지고 있지만 서로를 혼동하지 않도록하는 근본적인 차이점이 있습니다. ** ForEach-Object **의 약자로 ** % **를 사용할 수 있습니다. –

답변

1

당신은

$server2="$servers-bck" 

배열 $servers의 각 요소의 이름 -bck을 추가 할 것이라고 생각하는 것 같다. 그건 사실이 아니야.

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

당신이 내부 -bck를 추가 할 필요가 목록에서 각 서버에 대해 백업 서버를 효율적으로 활용하려면 다음 작업 대신, 배열 -bck 마지막 배열 요소 후 종료되도록 output field separator를 사용하여 요소를 결합하여 확장 루프 : 사이드 참고로

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

, 수동으로 CSV를 구축하지 않아야합니다.

$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

이 도움말은 내 문제를 해결하는 데 도움이됩니다. 그게 정말 도움이. 새로운 필자는 항상 이렇게 실수를 저지르기 힘듭니다. – Darkbishop

관련 문제