Главная > Windows > PowerShell ping диапазона адресов

PowerShell ping диапазона адресов


9 февраля 2021. Разместил: dimon
Команда пингует диапазон адресов 172.0.254.1-172.0.254.254 и выводит результат. Плюс - хост доступен, минус - не доступен.

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


Результат выглядит так:

PS C:\1..254 | %{ping -n 1 -w 10 172.0.254.$_ > $null; if($LASTEXITCODE -eq 0) {"172.0.254.$_+"} else {"172.0.254.$_-"}}
172.0.254.1+
172.0.254.2+
172.0.254.3-
172.0.254.4-
...

172.0.254.254+


Для себя я сделал короткий скрипт в котором сеть и диапазон ip адресов задается в начале файла скрипта в виде переменных:


$adr = "172.161.254"
$hostrange = 1..254

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


Скачать ping_range_ip.zip [294 b] (cкачиваний: 8)

Еще немного усложним скрипт, указав две переменные, которые определяют что выводить в консоль - показывать откликнувшиеся или не откликнувшиеся хосты:


$adr = "172.161.254"
$hostrange = 1..254
#Какие хосты показывать
$showon = 1  # Доступные: 1 - показывать, 0 - не показывать
$showoff = 0 # Недоступные: 1 - показывать, 0 - не показывать

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


Скачать ping_range_ip_v2.zip [416 b] (cкачиваний: 11)

Вариант три - теперь все переменные будем запрашивать в консоли PowerShell перед запуском ping-а хостов:
write-host "Введите сеть (без точки в конце, пример 172.161.254)"
$adr = read-host

write-host "Введите начальный адрес хоста (от 1 до 254)"
$hostrange1 = read-host
write-host "Введите конечный адрес хоста (от $hostrange1 до 254)"
$hostrange2 = read-host

write-host "Показывать доступные хосты (1 - да, 0 - нет)"
$showon = read-host
write-host "Показывать недоступные хосты (1 - да, 0 - нет)"
$showoff = read-host

write-host "*** Старт ***"
$hostrange1..$hostrange2 | %{ping -n 1 -w 10 "$adr.$_" > $null; if($LASTEXITCODE -eq 0) {if (1 -eq $showon) {"$adr.$_ +"}} else {if (1 -eq $showoff) {"$adr.$_ -"}}}


PowerShell ping диапазона адресов


Скачать ping_range_ip_v3.zip [541 b] (cкачиваний: 13)


PS:

Если при запуске скрипта получаем ошибку вида:

PS C:\Temp> .\ping_range_ip.ps1
.\ping_range_ip.ps1 : Невозможно загрузить файл C:\Temp\ping_range_ip.ps1, так как выполнение сценариев отключено в этой системе. Для получения дополнительных сведений см. about_Execution_Policies по адресу https:/go.microsoft.com/fwlink/?LinkID=135170.
строка:1 знак:1
+ .\ping_range_ip.ps1
+ ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : Ошибка безопасности: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess


Это значит, что Windows защищает пользователя от запуска скриптов PS.
Чтобы не понижать защищенность компьютера просто отключим эту защиту для запущенного процесса PowerShell. Это значит, что после закрытия окна PowerShell политика выполнения вернется в предыдущее состояние.

PS C:\Temp> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process

Изменение политики выполнения
Политика выполнения защищает компьютер от ненадежных сценариев. Изменение политики выполнения может поставить подугрозу безопасность системы, как описано в разделе справки, вызываемом командой about_Execution_Policies и расположенном по адресу https:/go.microsoft.com/fwlink/?LinkID=135170 . Вы хотите изменить политику выполнения?
[Y] Да - Y  [A] Да для всех - A  [N] Нет - N  [L] Нет для всех - L  [S] Приостановить - S  [?] Справка
(значением по умолчанию является "N"):y
PS C:\Temp>

Вернуться назад