Script em lote para descobrir se um host está ativo ou inativo

0

Eu preciso varrer vários sistemas na rede dentro do intervalo de IP 172.18.x.x para 172.25.x.x e verificar se cada um deles está ativo ou não, e depois descarregar o resultado em um arquivo. A seguir, o script:

@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
)))

Mas, o resultado conclui que todo sistema é 'UP', apesar de alguns endereços IP não serem usados.

Algum problema com o script?

    
por Mandar Shinde 25.03.2014 / 06:45

4 respostas

0

o problema em seu script era uma coisa muito estranha sobre scripts em lote. Para obter variáveis de ambiente para atualizar dentro de um IF ou PARA você tem que usar setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION e !var! . Se você está curioso, o absurdo (o que acontece se você não incluir essa linha setlocal com o! Var!) É explicado em mais detalhes em 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
)))

E se você quiser apenas os que estão em alta. Tente isto

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
    )
)))
    
por 25.03.2014 / 07:48
1

Sugiro spiceworks (estou sugerindo isso depois de ver sua pergunta link ). Todos os detalhes que você precisa estão disponíveis com ferramenta de inventor spiceworks.É melhor ajuste para o Windows AD, mas isso pode ser feito de qualquer maneira também.

    
por 25.03.2014 / 08:09
0

Eu não sei quantos sistemas você precisa verificar .. Encontrou uma solução certa aqui .. Se você acha fácil fazer assim, aceite esta resposta ...

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

** inclua todos os ip's em serverservers.txt

    
por 25.03.2014 / 07:14
0

Eu usaria uma ferramenta como Angry IP Scanner para fazer este trabalho. Scripting parece inútil quando existem tantas outras ferramentas que podem fazer exatamente a mesma coisa.

    
por 25.03.2014 / 07:28