2015-04-24 23 views
4

我使用這個鏈接提供了以下建議文本列表獲取服務器名稱和IP: Experts-ExchangePowerShell的 - 從

我試圖把一臺服務器(主機名)列表,並保存在主機名和IP地址在.csv文件中。

使用以下Powershell代碼,我確實在結果窗格中看到了每臺服務器的主機名,但IP地址相同。

$servers = get-content "C:\TEMP\servers.txt" 
$serversAndIps = "C:\TEMP\List_of_servers_with_ips.csv" 


$results [email protected]() 
foreach ($server in $servers) { 
    $results [email protected]() 
    $result = "" | Select ServerName , ipaddress 
    $result.ipaddress = [System.Net.Dns]::GetHostAddresses($server) 
    foreach($a in $addresses) { 
    "{0},{1}" -f $server, $a.IPAddressToString 
    } 
    $result.servername = $server 
    $results += $result 
} 
$results | export-csv -NoTypeInformation $serversandips 

當我打開.csv文件,我得到這個:

"ServerName","ipaddress" 
"Server_name_1","System.Net.IPAddress[]" 

如果我運行這個PowerShell腳本,我可以得到主機名,並在結果窗格中正確的IP地址。我只需要知道如何將結果傳輸到.csv文件。

$servers = get-content "C:\TEMP\servers.txt" 
foreach ($server in $servers) { 
    $addresses = [System.Net.Dns]::GetHostAddresses($server) 
    foreach($a in $addresses) { 
    "{0},{1}" -f $server, $a.IPAddressToString 
    } 
} 

有什麼建議嗎?

+0

嘗試採取的是$結果= @()圈外的內部。 – mjolinor

+0

@mjolinor我把它拿出來,現在我得到的所有主機名,但我仍然得到「Server_Name_1」,「System.Net.IPAddress []」 –

+1

您正在存儲'[System.Net.Dns] :: GetHostAddresses($ server) 數組中的對象。如果您執行Get-Member,您將看到您的數組正在存儲System.Net.IPAddress類型的對象。你可能需要這樣做,而不是:$ result.ipaddress =([System.Net.Dns] :: GetHostAddresses($ server))。IPAddressToString – mortenya

回答

8

看起來像在工作中的一些簡單的錯別字。

  • $結果被在環
  • $循環內的地址沒有被分配給內部復位。
  • $ result.ipaddress未分配給輸出對象的$ a.IPAddressToString。

試試這個:

$servers = get-content "X:\servers.txt" 
$serversAndIps ="X:\test.csv" 

$results = @() 
foreach ($server in $servers) 
{ 
    $result = "" | Select ServerName , ipaddress 
    $result.ipaddress = [System.Net.Dns]::GetHostAddresses($server) 
    $addresses = [System.Net.Dns]::GetHostAddresses($server) 

    foreach($a in $addresses) 
    { 
     "{0},{1}" -f $server, $a.IPAddressToString 
     $result.ipaddress = [System.Net.Dns]::GetHostAddresses($server) 
    } 

    $result.servername = $server 
    $result.ipaddress = $a.IPAddressToString 
    $results += $result 
} 

$results | export-csv -NoTypeInformation $serversandips 
+0

我非常綠色與Powershell。謝謝您的幫助!!! –

+0

我們都必須從某個地方開始。祝你好運。 –

+0

如果IP無法訪問,那麼腳本會在第8,15和25行引發異常,所以它們應該像[這裏](http://stackoverflow.com/a/27573389/911419)那樣包裝在try-catch中, – Suncatcher