# Опрос хостов подсети (последовательный ping) # Скрипт для последовательного перебора хостов выбранной подсети и запуска ping (эхо-запроса) для каждого из них. # Получить начальное значение подсети (вида: xxx.xxx.xxx) $suf=$args[0] # Назначить первый адрес для опроса $ipCurrent = 1 # Формирование адреса из начального значения подсети и текущего в проходе значения # Выполнить консольную команду "ping" (один запрос с минимальным ожиданием) # Передать в переменную только значение содержащее слово "Ответ" # Если значение назначено (существует), вывести его на экран # Прибавить еденицу к текущему значению адреса # Очистить значение переменной "status_ping" # Выполнение цикла, пока значение адреса менее 255 Do { $ipAddr=$suf+"."+$ipCurrent $status_ping = ping $ipAddr -l 1 -n 1 -w 1 | Select-String "Ответ" if ($status_ping) {Write-Host $status_ping} $ipCurrent+=1 Remove-Variable status_ping } while ($ipCurrent -lt 255) # Пример использования: # %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe C:\Service\A001.ps1 172.16.71 # # Пример результата: # Ответ от 172.16.71.1: число байт=1 время<1мс TTL=64 # Ответ от 172.16.71.2: число байт=1 время<1мс TTL=128 # Ответ от 172.16.71.10: число байт=1 время<1мс TTL=255 # # Цель использования может быть простой, пусть и не быстрый скан сети средствами Powershell. # Чаще всего я применяю его в ситуациях, когда мне нужно опросить соседнюю подсеть. В своей подсети получить список хостов значительно проще: # Достаточно отправить любой пакет на Broadcast адрес (последний адрес в подсети). Например, ping 172.16.71.255. # Ответ будет получен от всех получателей и результат будет достигнут значительно быстрее. # Для обвновления arp таблицы достаточно начала обмена данными с хостом (в данном случае это icmp пакет). # Поэтому каждый доступный адрес собественной подсети появится в arp таблице (проверить ее содержимое можно командой "arp -a".