Мне нужно сканировать несколько систем в сети в диапазоне 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
)))

Но в результате делается вывод, что каждая система работает, даже если некоторые IP-адреса не используются.

Есть проблемы со сценарием?

4 ответа4

1

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

0

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

0

проблема в вашем скрипте была очень странной в пакетных скриптах. Чтобы получить переменные окружения для обновления внутри IF или FOR, вы должны использовать setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION и !var! , Если вам интересно, абсурд (что произойдет, если вы не включите эту строку setlocal в!вар!) объясняется далее в 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
    )
)))
0

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

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

** включить все ip в testservers.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .