Powershell以编程方式从主机获取IP

时间:2017-02-08 09:48:46

标签: powershell ip host

我有一张来自我的局域网(超过1000)的主机列表,这些主机是以Excel格式从以前在我开始工作之前在这里工作过的人提取的。我需要知道每个主机的IP。

我需要一些自动提取(我希望应该有一个更聪明的方法,而不是手动ping所有主机,以获得IP)。我遇到了SO并阅读了this question。使用PowerShell意味着迈向我需要的自动化的良好一步。

但是,我所堆叠的是如何自动执行此命令(在PowerShell中)以便将excel文件用作输入(或文本)并提供包含相关IP的输出文件?

更新:我想到的代码:

$servers = get-content "C:\scr\Servers.txt"
foreach ($Server in $Servers)
{
    $Addresses = $null
    try {
        $Addresses =     [System.Net.Dns]::GetHostAddresses("$Server").IPAddressToString
    }
    catch { 
        $Addresses = "Server IP cannot resolve."

    }
    foreach($Address in $addresses) {
        write-host $Server, $Address 
    }
}

用作输入的Excel文件逐行包含单个列中的主机名。这个Excel文件可以很容易地转换为文本格式(这是我现在已经完成的,产生Servers.txt文件)。

此代码的问题在于它仅在Powershell窗口中显示输出,没有文件。

2 个答案:

答案 0 :(得分:1)

        $output = @()
        $servers = get-content "C:\scr\Servers.txt"
        foreach ($Server in $Servers)
        {
            $Addresses = $null
            try {
                $Addresses = ((Test-Connection $Server | select -skip 3).IPV4Address).IPAddressToString
            }
            catch { 
                $Addresses = "Server IP cannot resolve."

            }

           $output += New-object psobject -property @{
                      servername = $server
                      Addresses = $Addresses
                      }
     }

        $output | select servername, Addresses | export-csv ".\Addresslist.csv" -NoTypeInformation

答案 1 :(得分:0)

最后,这段代码在调整之后成功运行(并且在Powershell窗口中显示其结果 - 那些IP - 在脚本执行期间)。最后,结果将导出到Addresslist.csv文件中。

    $output = @()
    $servers = get-content "C:\scr\Servers.txt"
    foreach ($Server in $Servers)
    {
        $Addresses = $null
        try {


            $Addresses =     [System.Net.Dns]::GetHostAddresses("$Server") 
        }
        catch { 
            $Addresses = "Server IP cannot resolve."

        }

       $output += New-object psobject -property @{
                  servername = $server

                  Addresses = $Address


                  }

        foreach($Address in $addresses) {
        write-host $Server, $Address 
                                        }


 }

    $output | select servername, Addresses | export-csv ".\Addresslist.csv" -NoTypeInformation