2019-10-29

PowerShell: Пинг группы IP-адресов

У меня частенько бывает необходимость пинговать группу IP-адресов, или целую подсеть, без возможности использования стороннего ПО. PowerShell может легко справиться с этой задачей в одну строчку.



Содержание



Вывод Всех Адресов


Команда пинга всех адресов, доступных и недоступных (активных и неактивных), будет выглядеть так:

1..254 | %{ping -n 1 -w 10 192.168.0.$_ > $null; if($LASTEXITCODE -eq 0) {"192.168.0.$_+"} else {"192.168.0.$_-"}}


Разберем данную команду. С помощью конструкции 1..254 создается список из 254 чисел от 1 до 254. Далее, данный список обрабатывается в цикле %{...}. В качестве подстановки текущего значения цикла используется переменная $_.

Пингованием занимается стандартная утилита ping.exe. Выбрана она из-за более быстрой скорости работы. Данной утилите передаются параметры -n 1, что означает отправлять один пакет, и -w 10, время ожидания в миллисекундах. Перенаправление вывода утилиты ping перенаправляется в пустоту, этим занимается конструкция > $null.

После выполнения команды ping, последовательно проверятся код возврата if($LASTEXITCODE -eq 0). Если он положительный, то есть равен 0, то выводится IP-адрес со знаком плюс, в противном случае со знаком минус.


Вывод Только Доступных Адресов


Модифицируем команду для вывода только доступных (активных) адресов.

1..254 | %{ping -n 1 -w 10 192.168.0.$_ > $null; if($LASTEXITCODE -eq 0) {"192.168.0.$_"}}



Вывод Только Недоступных Адресов


Теперь, настроим команду на вывод недоступных адресов, то есть потенциально свободных.

1..254 | %{ping -n 1 -w 10 192.168.0.$_ > $null; if($LASTEXITCODE -ne 0) {"192.168.0.$_"}}



Итог


Подобную команду можно использовать не только для пингования, но и для проверки доступности TCP-портов, но об этом в следующий раз.

В статье было рассмотрено: Как выполнить пинг группы IP-адресов с помощью PowerShell?

Комментариев нет :

Отправить комментарий