[LØST] Bat script som automatisk pinger gateway?

29 innlegg i emnet

Skrevet

Hei! Jeg lurer på om det er mulig å lage et bat-script som ser sånn ut:

1. ipconfig

2. ping gateway

Sånn at ipconfig først kjøres, så "husker" scriptet resultatet av gateway for å så sette inn det automatisk når man taster 2 etterpå? Mulig dette er litt knotete forklart, men vi har en del kunder også er det et virkelig herk å få funnet IPen deres når de skal fjernstyres. Også ofte dukker det opp nettverksproblemer, så det hadde vært veldig fint å kunne fått brukeren til å trykke 2 uten noe vanskeligheter slik at jeg har kunnet sett resultatet direkte for feilsøking. Noen som vet om dette er mulig?

Edit: Det er vel forøvrig kanskje mulig å få bat-scriptet til å hente informasjonen fra registry da.. Men aner ikke om det i hele tatt lar seg gjøre. I Visual Basic vet jeg det går an, men har aldri hørt om det i bat.

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Jeg vet ikke hvordan du skal få .bat-scriptet til å huske IP'en, det må noen andre si, men jeg kan lage et enkelt script:

@echo off

:start

title Pinge gateway

echo 1 = ipconfig

echo 2 = pinge gateway

set /p valg=

if %valg% equ 1 goto :ipconfig

if %valg% equ 2 goto :ping

cls

echo No choice like that!

echo Try again...

pause & goto :start


:ipconfig

cls

ipconfig & pause

goto :start


:ping

ping %ipadresse% & pause

Det jeg ikke vet er hvordan man skal finne %ipadresse%, men det får du sikkert hjelp av noen andre til :)

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Tja, det ligner veldig på det jeg selv har hittil. Vel, mitt ser slik ut da:

Edit: de to ping-funksjonene har jeg ikke lagd noen kommando til som du sikkert skjønner. :) Men vil ta med den "no such function"-greiene! :) Litt artig.

@echo off

goto menu

:menu

echo.

echo                    [Network Troubleshooter]

echo.

echo.

echo          Valg

echo.

echo        1 Vis IP-adresse

echo        2 Ping Intern Gateway

echo        3 Ping Ekstern Gateway

echo        4 Tracerout (www.vg.no)

echo        5 Quit

echo.

:choice

set /P C=      [1,2,3,4,5]?

if "%C%"=="5" goto quit

if "%C%"=="4" goto tracert

if "%C%"=="3" goto pingxgw

if "%C%"=="2" goto pingingw

if "%C%"=="1" goto ipconfig

:ipconfig

ipconfig

pause

cls

goto menu

:pingingw

nslookup

cls

goto menu

:pingxgw

nslookup

cls

goto menu

:tracert

tracert www.vg.no

pause

cls

goto menu

:quit

exit

Hmm, greide å finne hvor i registryet default gateway ligger, men maskinene er satt opp med DHCP.. :( Det betyr at det er nettverkskortet som lager stringen og dermed er den dynamisk og lages på nytt hver gang maskinen ber om ny TCP/IP settings.

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Hmm. Da vet jeg ikke om noe annet enn å kjøre "ipconfig" å be dem skrive gatewayen, med "set /p" kommandoen, dermed så kan du bruke det de har skrevet...

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

vurdert å bruke fjernsupport løsninger som f.eks logmein, som ikke krever at brukeren må vite ipadressen sin ?

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Høres flott ut det, men dette er en bedrift som har hundrevis av kunder og flerfoldige tusen brukere og maskiner. Så det systemet som er nå har blitt utviklet over mange års løp. Så jeg tror ikke jeg får satt dem på andre meninger med det første ihvertfall! ;)

Nei, tenkte bare å automatisere prosessen bittelitt da det kan av og til være svært vanskelig å få brukeren til å skrive "cmd --> ipconfig". Utrolig nok. Derfor hadde det vært kjekt dersom de hadde hatt en snarvei på skrivebordet til en bat-fil som gjør dette litt enklere.

Men denne "set /p" kommandoen virker veldig interessant. Brukerne greier garantert uten problemer å selv skrive IPen.. Men hvordan kan jeg da få til at scriptet selv kjører "ping %valg%"?

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Jeg bare kopierer mitt forrige, bare for å vise prinsippet:

echo off

:start

title Pinge gateway

echo 1 = ipconfig

echo 2 = pinge gateway

set /p valg=

if %valg% equ 1 goto :ipconfig

if %valg% equ 2 goto :ping

cls

echo No choice like that!

echo Try again...

pause & goto :start


:ipconfig

cls

ipconfig

echo Skriv det som står etter "ipadresse"

set /p ipadresse=

goto :start


:ping

ping %ipadresse% & pause

Du ser siste delen er det som er endret, så kan du videre utvikle det :)

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Thanx! Får sjekke dette! Håper bare det ikke blir så store problemer med å eventuelt rulle ut dette til alle brukerne på nettverkene. Får høre med administratorene dersom jeg får til dette bra og enkelt nok! :)

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Er litt usikker på om det er dette dere er ute etter, men forsøker.

Skriptet finner Gateway ip, samt å pinge denne.

Testkode (Batch-fil):

@echo off

FOR /F "eol=M skip=9 tokens=12 delims= " %%i in ('ipconfig') do set pingip=%%i

ping %pingip%

pause

Dette fungerer selvsagt kun på NORSK Win XP (muligen også W2K).

IPCONFIG kommando på min maskin ser slik ut:

Windows IP-konfigurasjon

Ethernet-kort Trådløs nettverkstilkobling:

Tilkoblingsspesifikt DNS-suffiks : lan

IP-adresse . . . . . . . . . . . : 192.168.0.3

Nettverksmaske . . . . . . . . . : 255.255.255.0

Standard gateway . . . . . . . . : 192.168.0.1

Ethernet-kort Lokal tilkobling:

Medietilstand. . . . . . . . . . : Medium frakoblet

Det dette gjør:

FOR /F "eol=M skip=9 tokens=12 delims= " %%i in ('ipconfig') do set pingip=%%i

er å hoppe over de 9 første linjene, er da på linjen med "gateway" informasjon. Leser "tokens" nummer 12, siden delims er en blank (mellomrom) er token nummer 12 ip adressen til gateway, altså 192.168.0.1. Denne verdien lagres så i "pingip".

Som i sin tur benyttes i linjen:

ping %pingip%

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Men hvorfor skal ikke dette fungere i Engelsk Windows XP? Ser ingenting som tilsier at det må være Norsk vel? Eller er det jeg som er blind? Uansett, ser veldig bra ut dette da! Får prøve å customize det en del!

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Fordi loopen går videre etter at Gateway ipadressen er funnet, neste kriterie som slår til er ordet "Medium" som er tokens 12. Men her slår kommandoen "eol=M", som betyr at dersom linjen som leses starter med "M" (og det gjør den her) er "filen" (ipconfig kommandoen i dette tilfellet) kommet til enden.

Koden:

FOR /F "eol=M skip=9 tokens=12 delims= " %%i in ('ipconfig') do set pingip=%%i

Neste linje som leses etter linjen med Gateway informasjonen:

Medietilstand. . . . . . . . . . : Medium frakoblet

Dersom det i den engelske versjonen har like mange mellomrom (delims er satt til blank/mellomrom, så det blir tolket som skilletegn) som i den norske, og at tokens 12 starter med M, så fungerer det.

Eks.:

Dette er en test

token 1 = Dette

token 2 = er

token 3 = en, osv

Og dette skjer for hver linje som "leses".

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Ah! Derfor denne her heller ikke fungerte da sikkert.

Scriptet kjører ikke netsh kommandoen og uansett så kommer resultatet at jeg har fast IP når jeg ikke har det. Sikkert språkforskjellen som gjør det ettersom jeg fant denne script-biten på nettet og sikkert med Engelsk Windows som test-OS og jeg har på denne pcen her nå Norsk XP.

:renew

::set dhcp=

cls

echo Sjekker om klienten har dynamisk IP-konfigurasjon...

for /f "tokens=3 delims= " %%d in (

'netsh int ip sh add ^| find /i "DHCP"'

) do (

set dhcp=%%d

)

:: Hvis klientens IP er dynamisk, release og renew IP adressen

if /i "%dhcp%"=="Yes" (

echo Klienten har adresse fra DHCP - Fornyer DHCP Adresse leien...

ipconfig /release > nul

ipconfig /renew > nul

) else (

echo Klienten har fast IP adresse - Ingen reparering finner sted...

)

Men såvidt jeg vet så er alle maskinene i nettverket på jobben faktisk av Engelsk XP og 2000. Så da er jeg nødt til å redigere noen småting i scriptet da? Går jo sikkert an å fordele scriptet i to deler da med subsection ser det først finner ut at hvilket språk OS'et tilhører for å så sende bruke en "goto :english" eller noe? Fungerer helt sikkert. Hadde vært kjekt dersom det hadde fungert på begge språk uten at det har vært to fysiske script-filer. Men det fikser seg sikkert. Nå må jeg legge meg så jeg våkner opplagt og uthvilt i morgen! Poster sikkert oppdateringer om hvordan det går i morgen! :) Takk for raske og særdeles gode svar!

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Svaret fra "IPCONFIG" er sikkert også kortere på vanlige PC'er. Som du kanskje la merke til kom "svaret" fra mitt trådløse nettverkskort.

I dag sitter jeg påkoblet via nettverkskabel. og skriptet fungerer heller ikke på min PC.

Får håpe at det på de maskinen du skal bruke skriptet kun er ett nettverkskort. Slik at "IPCONFIG" svaret er mer konsistent.

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Har testet på Win NT norsk, med ett nettverkskort. Her viser det seg at svaret fra "IPCONFIG" også er litt forskjellig. Den nye FOR sløyfen er nå:

FOR /F "skip=7 tokens=10 delims= " %%i in ('ipconfig') do set pingip=%%i

WinXP Gateway svar:

Standard gateway . . . . . . . . : 192.168.0.1

WinNT Gateway svar:

Standard gateway. . . . . . . : 10.210.25.12

Som du ser har jeg fjærnet "eol" parameter siden gateway informasjonen ligger på siste linjen på en datamaskin med kun ett nettverkskort.

tokens er endret til 10 for WinNT. Har du XP bør 12 fungere. Sjekk NO vs EN språk.

Gi tilbakemelding hvordan det går. Har du problemer forsøk å poste nøyaktig som mulig hvordan ditt "IPCONFIG" svar er.

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Fungerer bra med

FOR /F "eol=; skip=9 tokens=13 delims= " %%i in ('ipconfig') do set pingingw=%%i

I Engelsk XP ihvertfall. Men jeg tror bare jeg skal legge til en funksjon som sjekker om det er Norsk eller Engelsk for å så hoppe til ønskede funksjon. Slik ser hele scriptet ut akkurat nå:

(Har tatt vekk ip-info til serverne her ettersom jeg ikke helt er sikker på om dette bør spres på et forum! ;))

@echo off

:: Sjekker hvilket OS scriptet kjører på.

if not "%OS%"=="Windows_NT" goto :end

ver | find "[Version 5" || goto :menu

cls

goto menu

:menu

echo.

echo                  [Network Troubleshooter]

echo.

echo.

echo          Valg

echo.

echo        [1] Vis IP-adresse

echo        [2] Ping Default gateway

echo        [3] Ping ekstern adresse

echo        [4] Tracerout ( www.vg.no)

echo        [5] Reparere tilkobling

echo        [6] Avslutt

echo.

echo.      --Velg funksjon--

echo.

:choice

set /P C=     

if "%C%"=="6" goto quit

if "%C%"=="5" goto renew

if "%C%"=="4" goto tracert

if "%C%"=="3" goto pingxadr

if "%C%"=="2" goto pingingw

if "%C%"=="1" goto ipconfig

cls

echo.

echo      Valget samsvarer ikke med tjenesten!

echo      ------------------------------------

pause>nul

cls

goto :menu

:ipconfig

cls

ipconfig

echo.

echo Trykk en hvilken som helst tast..

pause>nul

cls

goto menu

:pingingw

cls -w 300

echo.

echo      Sjekker om maskinen har kontakt med default gateway...

echo      ----------------------------------------------------

FOR /F "eol=; skip=9 tokens=13 delims= " %%i in ('ipconfig') do set pingingw=%%i

ping %pingingw%

echo.

echo Trykk en hvilken som helst tast..

pause>nul

cls

goto menu

:pingxadr

cls -w 300

echo Sjekker om maskinen har kontakt med ekstern adresse...

ping "ekstern adresse"

echo.

echo Trykk en hvilken som helst tast..

pause>nul

cls

goto menu

:tracert

cls -w 300

echo Sjekker forbindelsene fra klient til ekstern nettside...

tracert www.vg.no

echo.

echo Trykk en hvilken som helst tast..

pause>nul

cls

goto menu

:renew

::set dhcp=

cls

echo Sjekker om klienten har dynamisk IP-konfigurasjon...

for /f "tokens=3 delims= " %%d in (

'netsh int ip sh add ^| find /i "DHCP"'

) do (

set dhcp=%%d

)

:: Hvis klientens IP er dynamisk, release og renew IP adressen

if /i "%dhcp%"=="Yes" (

echo Klienten har adresse fra DHCP - Fornyer DHCP Adresse leien...

ipconfig /release > nul

ipconfig /renew > nul

) else (

echo Klienten har fast IP adresse - Ingen reparering finner sted...

echo.

echo Trykk en hvilken som helst tast..

)

:: Flush ARP, NetBIOS, og DNS cache

echo Flushing ARP Cache...

arp -d * > nul

echo Flushing NetBIOS Cache...

nbtstat -R > nul

echo Flushing DNS Cache...

ipconfig /flushdns > nul

:: Re-registrerer NetBIOS og datamaskinnavn med WINS and DNS

echo Re-registererer NetBIOS og Datamaskinnavn med WINS and DNS...

echo.

echo Trykk en hvilken som helst tast..

nbtstat -RR > nul

ipconfig /registerdns > nul

pause>nul

cls

goto menu

:end

echo Dette scriptet fungerer kun i Windows 2000/XP/2003!!

pause>nul

echo.

echo Trykk en hvilken som helst tast..

:quit

exit

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Det er nok lurt "raziel014". Skriptet ser svært bra ut :thumbup:

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

:D

Fint å få god tilbakemelding! Nei, altså jeg kan ikke begripe hvorfor programmererne i bedriften ikke har lagd en enkel applikasjon som gjør akkurat det samme. De hadde sikkert fått det til enda bedre. Bare en helt enkel app som brukeren kan trykke "neste" også sjekkes gateway osv. Så kommer f.eks et grønt lys om alt er bra.

Egentlig litt smårart at jeg som nå har vært i denne bedriften i knappe 2 uker og som sitter på 1.linje support skal trenge å lage noe som det her. Behovet er der absolutt. Men jeg tar å trikser litt her og der med scriptet jeg også får jeg sjekket ut om det fungerer! :) Oppdaterer tråden når dette er gjort! C u latah! ;)

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Kanskje eg er litt seint ute, men eg har ei litt kortare løysing enn dei som har vore her tidlegare.

netsh diag ping gateway

Den kommandoen pingar adressa i Standard gateway.

Kan diverre ikkje teste korleis dette fungerar dersom du har fleire nettverkstilkoblingar, men det kan du kanskje prøve, dersom det er aktuelt. :)

Netsh kan brukast til mykje rart, det er bare å køyre netsh og sjå seg litt rundt - ping gateway-kommandoen fann eg no akkurat. :)

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Svarte, der var det også en funksjon ja! Kanskje jeg kan bruke den som backup eller noe. Dersom den første funksjonen feiler, så kanskje jeg kan kjøre netsh-funksjonen. Hmm, nei får bare teste litt. Takk! :)

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Det var lurt "enixitan", den hadde jeg ikke tenkt på.

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Har oppdatert scriptet nå med netsh kommandoen. Ser ut til å fungere bra! Da ble koden kuttet ned litt ettersom det funker på alle språk! :)

Men, en annen ting.

Jeg vil gjerne fjerne disse "pause>nul"-funksjonene.

Vet noen av dere om jeg eventuelt kan bruke en slags wait-kommando?

Altså, først blir jo pause>nul kjørt. Så en cls.

Det som hadde vært best hadde vært å fått fjernet pause og byttet ut med en slags "-wait 10" for 10 sekunder f.eks.

Edit: Glem det. Fant det ut! :D Egentlig har jo Microsoft lagd en sleep.exe kommando, men denne er jo selvfølgelig ikke med som standard.

Derfor kan jeg bare bruke denne

@ping -n 5 127.0.0.1>nul

Fungerer kanskje litt knotete, men det blir det samme likevel! :) Flott!

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Dessverre finnes det ingen egen wait kommando. Det du kan gjøre er å lage deg en batch fil du kaller "wait.bat", og bruker følgende kode i den:

@echo off

SET COUNT=1

:loop

set /a COUNT=%COUNT%+1

if (%COUNT%) == (5000) goto END

goto loop

:end

Denne koden "looper" i ca. 5 sekunder på en Centrino Due 1,6GHz.

Endre 5000 til det tallet som passer best for den maskinparken dere har.

I koden din hvor du ønsker å vente, kaller du "wait.bat". Du kan selvsagt gi 5000 (eller ett annet tall) inn som en parameter, slik at du kan variere wait lengden slik du ønsker i hver enkelt situasjon.

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Fant det ut likevel! En litt enklere variant uten at jeg trenger å lage en ny bat-fil. Se posten over.

@ping -n 5 127.0.0.1>nul

Tallet "5" betyr bare antall sekunder det skal delayes.

Ypperlig!

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Ja, det er riktig, men du må faktisk bruke 2 pinger (har testet), slik:

@ping 127.0.0.1 -n 2 -w 1000 > nul

@ping 127.0.0.1 -n %1% -w 1000 > nul

Bytt ut %1% med tallet 5, så blir det 5 sekunder, skriv 10, så blir det 10 sekunder.

Edit:

Vet ikke egentlig hvorfor.

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Hvorfor? Ser da ut til å fungere med bare èn?

Men en annen ting også. Mulig det blir litt for fancy da, men jeg tenkte at under kommandoen som pinger gateway, dersom den får Received=0, kan jeg da bruke denne "for /f"-greiene? For å så legge til en IF som sier at "dersom svaret i "den og den" linjen er "0", så forteller den at "du har ingen tilkobling til gateway"?

Flere ting kan også gjøres. F.eks dersom ip-adressen under ipconfig får svar "169.254.x.x", så forteller den at "du har ikke gyldig IP-adresse"?

Eller blir dette for mye styr?

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!


Start en konto

Logg inn

Har du allerede en konto? Logg inn her.


Logg inn nå

  • Hvem er aktive   0 medlemmer

    Ingen innloggede medlemmer aktive