locked
PowerShell: узнать ip ресурса

    Вопрос

  • Есть база интернет адресов ресурсов в текстовом формате domain_list.txt, каждый адрес в своей строке. Требуется узнать ip данных сайтов и вывести в файл в формате: имя ресурса - ip адрес.

    Пишу код:

    $domain_list = Import-Csv domain.txt
    
    
    
    foreach ($domain_one in $domain_list) {(new-object System.Net.Networkinformation.Ping).Send($domain_o
    
    ne)} | select Address

    Выдает ошибку:

    Не удается найти перегрузку для "Send" и количества аргументов: "1".
    
    строка:1 знак:92
    
    + foreach ($domain_one in $domain_list) {(new-object System.Net.Networkinformation.Ping).Send <<<< ($domain_one)}
    
     + CategoryInfo   : NotSpecified: (:) [], MethodException
    
     + FullyQualifiedErrorId : MethodCountCouldNotFindBest

    буду признателен за помощь
    19 июля 2011 г. 7:13

Ответы

  • Коллеги, а почему вы разрешаете адреса пингом? :) Для этого есть ведь специальная функция:

    [system.net.dns]::Resolve("ya.ru").addresslist | select -First 1 -ExpandProperty ipaddresstostring
    87.250.251.3


    AKA Xaegr, MVP: PowerShell Блог: http://xaegr.wordpress.com
    • Предложено в качестве ответа Angel-Keeper 5 августа 2011 г. 3:54
    • Помечено в качестве ответа Vector BCOModerator 27 ноября 2018 г. 15:29
    20 июля 2011 г. 5:48
    Модератор
  • Import-Csv domain.txt -Header Host | Foreach {
    		$comp = $_.Host
    		try {
    			$ip = Test-Connection $comp -Count 2 -ErrorAction Stop | Get-Unique | select Address,IPV4Address,IPV6Address
    			"{0} - {1}" -f $comp,$ip.IPV4Address.IPAddressToString
    			}
    		catch { "$comp - False"}
    	} | Out-File result.txt




    19 июля 2011 г. 10:09
    Отвечающий
  • PS D:\Work\Geo IP> foreach ($domain_one in $domain_list) {(new-object System.Net.Networkinformation.Ping).Send($domain_o
    
    ne) | select Address}
    
    Исключение при вызове "Send" с "1" аргументами: "Исключение во время запроса Ping."
    
    строка:1 знак:92
    
    + foreach ($domain_one in $domain_list) {(new-object System.Net.Networkinformation.Ping).Send <<<< ($domain_one) | sele
    
    ct Address}
    
     + CategoryInfo  : NotSpecified: (:) [], MethodInvocationException
    
     + FullyQualifiedErrorId : DotNetMethodException
    
    
    
    


    Это говорит о том, что ping не прошел :-)
    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/

    Специально привел список адресов в начале кода и последнюю строку, будьте внимательнее :).

     

    Сделал так:

    $domain_list = Get-Content 01.txt (test-connection -ComputerName $domain_list -Count 1 -ThrottleLimit 3 -asjob) | select IPV4Address, Address | Export-Csv -pat h data.csv

    Единственная проблема - test-connection не принимает в качестве аргументов список длиннее 256 элементов, а у меня около 1000 адресов. Пришлось разбить файл на части и скармливать отдельно.

    • Помечено в качестве ответа Efimov Sergey 20 июля 2011 г. 5:27
    20 июля 2011 г. 5:14

Все ответы

  • Вместо $domain_list = Import-Csv domain.txt
    поробуйте $domain_list = Get-Content domain.txt

    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    19 июля 2011 г. 7:58
    Модератор
  • PS D:\Work\Geo IP> $domain_list = Get-Content test.txt
    PS D:\Work\Geo IP> $domain_list
    "cordis.europa.eu"
    "nanobioraise.org"
    "ambio.bham.ac.uk"
    PS D:\Work\Geo IP> foreach ($domain_one in $domain_list) {(new-object System.Net.Networkinformation.Ping).Send($domain_o
    ne) | select Address}
    Исключение при вызове "Send" с "1" аргументами: "Исключение во время запроса Ping."
    строка:1 знак:92
    + foreach ($domain_one in $domain_list) {(new-object System.Net.Networkinformation.Ping).Send <<<< ($domain_one) | sele
    ct Address}
      + CategoryInfo     : NotSpecified: (:) [], MethodInvocationException
      + FullyQualifiedErrorId : DotNetMethodException
    
    Исключение при вызове "Send" с "1" аргументами: "Исключение во время запроса Ping."
    строка:1 знак:92
    + foreach ($domain_one in $domain_list) {(new-object System.Net.Networkinformation.Ping).Send <<<< ($domain_one) | sele
    ct Address}
      + CategoryInfo     : NotSpecified: (:) [], MethodInvocationException
      + FullyQualifiedErrorId : DotNetMethodException
    
    Исключение при вызове "Send" с "1" аргументами: "Исключение во время запроса Ping."
    строка:1 знак:92
    + foreach ($domain_one in $domain_list) {(new-object System.Net.Networkinformation.Ping).Send <<<< ($domain_one) | sele
    ct Address}
      + CategoryInfo     : NotSpecified: (:) [], MethodInvocationException
      + FullyQualifiedErrorId : DotNetMethodException
    
    PS D:\Work\Geo IP> (new-object System.Net.Networkinformation.Ping).Send("cordis.europa.eu")
    
    
    Status    : Success
    Address    : 194.7.148.38
    RoundtripTime : 66
    Options    : System.Net.NetworkInformation.PingOptions
    Buffer    : {97, 98, 99, 100...}
    
    
    
    PS D:\Work\Geo IP>
    

    19 июля 2011 г. 8:12
  • Import-Csv domain.txt -Header Host | Foreach {
    		$comp = $_.Host
    		try {
    			$ip = Test-Connection $comp -Count 2 -ErrorAction Stop | Get-Unique | select Address,IPV4Address,IPV6Address
    			"{0} - {1}" -f $comp,$ip.IPV4Address.IPAddressToString
    			}
    		catch { "$comp - False"}
    	} | Out-File result.txt




    19 июля 2011 г. 10:09
    Отвечающий
  • PS D:\Work\Geo IP> foreach ($domain_one in $domain_list) {(new-object System.Net.Networkinformation.Ping).Send($domain_o
    ne) | select Address}
    Исключение при вызове "Send" с "1" аргументами: "Исключение во время запроса Ping."
    строка:1 знак:92
    + foreach ($domain_one in $domain_list) {(new-object System.Net.Networkinformation.Ping).Send <<<< ($domain_one) | sele
    ct Address}
     + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException
     + FullyQualifiedErrorId : DotNetMethodException
    
    


    Это говорит о том, что ping не прошел :-)
    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    20 июля 2011 г. 2:27
    Модератор
  • PS D:\Work\Geo IP> foreach ($domain_one in $domain_list) {(new-object System.Net.Networkinformation.Ping).Send($domain_o
    
    ne) | select Address}
    
    Исключение при вызове "Send" с "1" аргументами: "Исключение во время запроса Ping."
    
    строка:1 знак:92
    
    + foreach ($domain_one in $domain_list) {(new-object System.Net.Networkinformation.Ping).Send <<<< ($domain_one) | sele
    
    ct Address}
    
     + CategoryInfo  : NotSpecified: (:) [], MethodInvocationException
    
     + FullyQualifiedErrorId : DotNetMethodException
    
    
    
    


    Это говорит о том, что ping не прошел :-)
    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/

    Специально привел список адресов в начале кода и последнюю строку, будьте внимательнее :).

     

    Сделал так:

    $domain_list = Get-Content 01.txt (test-connection -ComputerName $domain_list -Count 1 -ThrottleLimit 3 -asjob) | select IPV4Address, Address | Export-Csv -pat h data.csv

    Единственная проблема - test-connection не принимает в качестве аргументов список длиннее 256 элементов, а у меня около 1000 адресов. Пришлось разбить файл на части и скармливать отдельно.

    • Помечено в качестве ответа Efimov Sergey 20 июля 2011 г. 5:27
    20 июля 2011 г. 5:14
  • Коллеги, а почему вы разрешаете адреса пингом? :) Для этого есть ведь специальная функция:

    [system.net.dns]::Resolve("ya.ru").addresslist | select -First 1 -ExpandProperty ipaddresstostring
    87.250.251.3


    AKA Xaegr, MVP: PowerShell Блог: http://xaegr.wordpress.com
    • Предложено в качестве ответа Angel-Keeper 5 августа 2011 г. 3:54
    • Помечено в качестве ответа Vector BCOModerator 27 ноября 2018 г. 15:29
    20 июля 2011 г. 5:48
    Модератор
  • Спасибо. Это сократило время отработки моего скрипта с 9 минут до 10 секунд.
    • Изменено SergeyEg 28 ноября 2018 г. 13:42
    26 ноября 2018 г. 13:25