2017-02-08 24 views
0

У меня есть список хостов из моей локальной сети (более 1000), который был извлечен в формате Excel от предыдущего парня, который работал здесь до того, как начал свою работу. Мне нужно знать IP каждого хоста.Powershell получает 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, без файла.

+0

Какие данные о компьютерах содержатся в файле Excel? –

+1

Можете ли вы дать образец своего собственного кода? SO не является службой написания сценария. Люди здесь, как правило, счастливы помочь, но требуются собственные усилия (поскольку мы здесь не для того, чтобы выполнять вашу оплачиваемую работу). Один совет: .NET class System.Net.Dns содержит несколько методов для разрешения имен хостов на IP-адреса. – bluuf

+0

Должен ли я добавить что-то вроде> C: \ pathtooutput.txt где-нибудь в коде? Где? – Gab2020

ответ

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 
+0

Спасибо, он работает, нет ошибок, но отсутствует основная информация в выходном файле, то есть IP. Пример из выходного файла: ЗАПУСК ВЫХОДА ЗДЕСЬ «hostename0», «IP-адрес сервера не может быть разрешен». «hostname1», «IP-адрес сервера не может быть разрешен». «hostname2», «hostname3», «IP-адрес сервера не может быть разрешен». "hostname4", "hostname5", ENDING OUTPUTFILE ЗДЕСЬ и так далее. – Gab2020

+0

Пожалуйста, проверьте сейчас, я редактировал код. –

+0

Запуск, еще не завершен, но для нескольких хостов возникла ошибка: «Тестирование: не удалось проверить подключение к компьютеру« xyz »: запрошенное имя действительно, но не найдены данные запрашиваемого типа». Я не уверен, как избавиться от этого, также не знаю, будет ли для остальных хостов информация точной и если она будет зарегистрирована в выходном файле. Нет, ничего не было зарегистрировано. Он был закончен. \ – Gab2020

0

Наконец, этот код работает успешно, после tweakening (а также отображается в окнах 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 

 Смежные вопросы

  • Нет связанных вопросов^_^