2012-03-14 95 views
0

我管理大量的服務器,我們已經建立了你可以ping通服務器名(DNS記錄)的地方。我的一些服務器也有多個nics。所以我需要的是一個腳本,我可以ping多個服務器,它將返回該服務器的每個nic的ip地址。如果它可以導出到一個csv,那也會很好。檢查多個服務器的IP地址多個nics powershell

回答

0

這會幫助你:

function PingServer($serverName) 
{ 
    (Test-Connection $serverName -Count 1 -ErrorAction SilentlyContinue).IPV4Address.IPAddressToString 
} 

$servers = "server1.com", "server2.com", "server3.com" 

$hash = @{} 
foreach($server in $servers) 
{ 
    $hash.Add($server, (PingServer $server)) 
} 
$hash.GetEnumerator() | ForEach-Object { New-Object PSObject -Property @{ ServerName = $_.Key; IPAddress = $_.Value } | Select-Object -Property ServerName, IPAddress } | Export-CSV -Path c:\PST\1.csv -NoTypeInformation 

您可能需要改變它有點多個網絡接口的

+0

好的,謝謝我需要每個服務器名後的.com?還有哪部分標識了NIC? – BigCAT41 2012-03-19 15:50:43

+0

@ BigCAT41追蹤不同網卡的時候並不是那麼容易,因爲它可以ping通它 - 它從單個地址發送響應,不知道如何做到這一點。嘗試玩 '(測試連接$ serverName - 計數1 - 錯誤行動SilentlyContinue).IPV4Address.IPAddressToString' – 2012-03-19 15:54:23

+0

好的謝謝。我真的需要擔心的是不同的IP地址,這就是爲什麼我需要跟蹤所有的nics。 – BigCAT41 2012-03-19 18:55:45

0

在這裏,這對我的作品,我用它來獲取所有的IPv4從地址服務器。請記住,這個測試可以在嘗試獲取信息之前先對其進行測試,然後使用WMI獲取所需的數據。

#Get NIC IP Addresses 
Function Get-NICIPAddresses 
{ 
    param 
    (
     $ComputerName 
    ) 

    Try 
    { 
     $NICIPInformation = gwmi Win32_NetworkAdapterConfiguration -Filter "IPEnabled=TRUE" -ComputerName $ComputerName -ErrorAction "Stop" 
    } 
    Catch 
    { 
     Write-Host "$($_.exception)" -ForegroundColor Yellow 
     return $Null 
    } 

    return $NICIPInformation 
} 

$Computer = "127.0.0.1" 

if (Test-Connection -Quiet $Computer) 
{ 
    #WMI IP Addresses 
    [array]$IPInformation = Get-NICIPAddresses $Computer 

    #IP Addresses 
    if ($IPInformation.Count -gt 0) 
    { 
     #Array to hold all IP Addresses 
     [array]$IPAddresses = @() 

     #Loop through the IP Addresses, look for all IP addresses that match the AddressFamily "InterNetwork" - AKA IPv4 - http://msdn.microsoft.com/en-us/library/system.net.sockets.addressfamily.aspx 
     foreach ($IPAddressInformation in $IPInformation) 
     { 
      #Use System.Net.IPAddress array to match the IP address values to acutal IP Addresses 
      $IPAddresses += [System.Net.IPAddress[]]$IPAddressInformation.IPAddress | ? {$_.AddressFamily -eq "InterNetwork"} 
     } 

     #Sort the values from smallest to largest IP addresses 
     $IPAddresses = $IPAddresses | % {$_.IPAddressToString} | Sort {"{0:d3}.{1:d3}.{2:d3}.{3:d3}" -f @([int[]]$_.split("."))} 

     #Return string results, or $Null depending upon input. 
     if ($IPAddresses.Count -gt 0) 
     { 
      $IPAddresses = $IPAddresses -Join " ; " 
     } 
     else 
     { 
      $IPAddresses = $Null 
     } 
    } 
    else 
    { 
     $IPAddresses = $Null 
    } 

    #Return NIC info 
    foreach ($NIC in $IPInformation) 
    { 
     $NIC 
    } 

    #Current IPv4 Addresses 
    $IPAddresses 
}