Пакетный скрипт для определения работоспособности хоста

Пакетный скрипт для определения работоспособности хоста

Мне нужно просканировать несколько систем в сети в диапазоне IP от 172.18.xx до 172.25.xx и проверить, активна ли каждая из них, а затем вывести результат в файл. Ниже приведен скрипт:

@echo off
for /L %%x in (18,1,25) do (
    for /L %%y in (1,1,254) do (
        for /L %%z in (1,1,254) do (

    ping -n 1 172.%%x.%%y.%%z | find "Reply" > NUL
    IF NOT ERRORLEVEL 1 (set state=UP) ELSE (set state=DOWN)

    echo 172.%%x.%%y.%%z is %state% >> state.txt
)))

Однако в результате делается вывод, что все системы находятся в состоянии «UP», даже несмотря на то, что некоторые IP-адреса не используются.

Какие-то проблемы со сценарием?

решение1

проблема в вашем скрипте была в очень странной вещи о пакетных скриптах. Чтобы заставить переменные окружения обновляться в IF или FOR, вы должны использовать setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION и !var!. Если вам интересно, абсурд (что произойдет, если вы не включите эту строку setlocal с !var!) объясняется далее в set /?.

setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
for /L %%x in (18,1,25) do (
    for /L %%y in (1,1,254) do (
        for /L %%z in (1,1,254) do (

    ping -n 1 172.%%x.%%y.%%z | find "Reply" > NUL
    IF NOT ERRORLEVEL 1 (set state=UP) ELSE (set state=DOWN)

    echo 172.%%x.%%y.%%z is !state! >> state.txt
)))

А если вам нужны только те, которые есть. Попробуйте это

setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
for /L %%x in (18,1,25) do (
    for /L %%y in (1,1,254) do (
        for /L %%z in (1,1,254) do (

    ping -n 1 -w 1000 172.%%x.%%y.%%z | find "Reply" > NUL
    IF NOT ERRORLEVEL 1 (
        set state=UP
        echo 172.%%x.%%y.%%z is !state! >> state.txt
    ) ELSE (
        set state=DOWN
    )
)))

решение2

Я предлагаюспеции(Я предлагаю это после просмотра вашего вопросаhttps://networkengineering.stackexchange.com/questions/6993/tool-or-script-for-collecting-network-inventory). Все необходимые вам сведения доступны с помощью инструмента инвентаризации Spiceworks. Он лучше всего подходит для Windows AD, но это можно сделать и любым другим способом.

решение3

Я не знаю, сколько систем вам нужно проверить.. Нашел верное решениездесь.. Если вам легко это сделать, примите этот ответ...

For /f %%i in (testservers.txt) do ping -n 1 %%i >>state.txt

**включить все IP-адреса в testservers.txt

решение4

Я бы использовал такой инструмент, какЗлой IP-сканердля выполнения этой работы. Написание скриптов кажется бессмысленным, когда есть так много других инструментов, которые могут делать то же самое.

Связанный контент