2012-03-14 104 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 
}