pinkywesen
Goto Top

BATCH-Script zum herausfinden der IP

Fehlermeldung in einem Script zum herausfinden der IP Adresse

Guten Tag liebe Administrator.de Benutzer,
Ich habe ein Script zum herausfinden der IP. Leider kriege ich immer eine Fehlermeldung wenn ich es starte. Ich weiß leider auch nicht wo das Problem liegt. Hier das Script.

@echo off
VER |find /i {{comment_strings:12792069575}} >NUL 
IF NOT ERRORLEVEL 1 GOTO 9598ME
VER |find /i "Windows 98" >NUL  
IF NOT ERRORLEVEL 1 GOTO 9598ME
VER |find /i {{comment_strings:12327948875}} >NUL 
IF NOT ERRORLEVEL 1 GOTO 9598ME
VER | find "XP" > nul  
IF %errorlevel% EQU 0 GOTO XP
VER | find "2000" > nul  
IF %errorlevel% EQU 0 GOTO 2000
VER | find "NT" > nul  
IF %errorlevel% EQU 0 GOTO NT
VER | find "Microsoft Windows [Version 6" > nul  
IF %errorlevel% EQU 0 GOTO Vista
VER | find "Microsoft Windows [Version 5" > nul  
IF %errorlevel% EQU 0 GOTO 2003
goto unknown
:unknown
echo OS: Unknown >> temp.txt
goto 2
{{comment_single_line_double_colon:1}}
echo OS: Windows 95 98 ME >> temp.txt
goto 1
{{comment_single_line_double_colon:2}}
echo OS: Windows NT >> temp.txt
goto 1
:2003
echo OS: Windows Server 2003 >> temp.txt
goto 1
:2000
echo OS: Windows 2000 >> temp.txt
goto 1
:XP
echo OS: Windows XP >> temp.txt
goto 1
:Vista
echo OS: Vista or Windows 7 >> temp.txt
goto 2
:1
echo Function MyIP_XMLHTTP( ) >wan.vbs
echo     Dim objRequest, strURL >>wan.vbs
echo     MyIP_XMLHTTP = "0.0.0.0" >>wan.vbs  
echo     strURL = {{comment_strings:24243163713}} >>wan.vbs 
echo     Set objRequest = CreateObject( "Microsoft.XMLHTTP" ) >>wan.vbs  
echo     objRequest.open "GET", strURL, False >>wan.vbs  
echo     objRequest.send vbNull >>wan.vbs
echo     If objRequest.status = 200 Then MyIP_XMLHTTP = objRequest.responseText >>wan.vbs
echo     Set objRequest = Nothing >>wan.vbs
echo End Function >>wan.vbs
echo ret = MyIP_XMLHTTP( ) >>wan.vbs
echo Set FSys = CreateObject("Scripting.FileSystemObject") >>wan.vbs  
echo Set MonFic = FSys.CreateTextFile("00001.tmp") >>wan.vbs  
echo With MonFic >>wan.vbs
echo .writeLine ret >>wan.vbs
echo End With >>wan.vbs
wan.vbs
if exist 00001.tmp goto xpexist
goto xpnotexist
:xpexist
for /F "tokens=* delims=" %%a in (00001.tmp) do set wanIP=%%a  
if xpexist 00001.tmp goto xpexist1
goto xpnotexist1
:xpexist1
del /F /Q 00001.tmp >NUL
:xpnotexist
echo Internet IP: %wanIP% >> temp.txt
exit
:2
echo Function MyIP_XMLHTTP( ) >wan.vbs
echo     Dim objRequest, strURL >>wan.vbs
echo     MyIP_XMLHTTP = {{comment_strings:24169627298}} >>wan.vbs 
echo     strURL = "http://www.whatismyip.com/automation/n09230945.asp" >>wan.vbs  
echo     Set objRequest = CreateObject( "Microsoft.XMLHTTP" ) >>wan.vbs  
echo     objRequest.open "GET", strURL, False >>wan.vbs  
echo     objRequest.send vbNull >>wan.vbs
echo     If objRequest.status = 200 Then MyIP_XMLHTTP = objRequest.responseText >>wan.vbs
echo     Set objRequest = Nothing >>wan.vbs
echo End Function >>wan.vbs
echo ret = MyIP_XMLHTTP( ) >>wan.vbs
echo Set FSys = CreateObject({{comment_strings:13850646882}}) >>wan.vbs 
echo Set MonFic = FSys.CreateTextFile("00001.tmp") >>wan.vbs  
echo With MonFic >>wan.vbs
echo .writeLine ret >>wan.vbs
echo End With >>wan.vbs
wan.vbs
if exist 00001.tmp goto vistaexist
goto vistanotexist
:vistaexist
for /F "tokens=* delims=" %%a in (00001.tmp) do set wanIP=%%a  
if exist 00001.tmp goto vistaexist1
goto vistanotexist1
:vistaexist1
del /F /Q 00001.tmp >NUL
:vistanotexist
ipconfig |find "IPv4" >> 00002.tmp  
for /f "tokens=2 delims=:" %%a in (00002.tmp) do set lanIP=%%a  
del /F /Q 00002.tmp >NUL
for /F "tokens=* delims=" %%i in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MUI\UILanguages"') do set lang=%%i  
set lang=%lang:~68,5%
echo Local IP:%lanIP% >> temp.txt
echo Internet IP: %wanIP% >> temp.txt
echo Localisation: %lang% >> temp.txt
exit

Sieht jemand das Problem ?

Vielen Dank im Vorraus !

Content-Key: 132475

Url: https://administrator.de/contentid/132475

Printed on: April 25, 2024 at 22:04 o'clock

Member: rubberman
rubberman Dec 30, 2009 at 01:59:32 (UTC)
Goto Top
Hallo Pinkywesen,

zumindest 3 Dinge, die mir beim Überfliegen des Codes aufgefallen sind:
1. es gibt nur "IF EXIST ....", um das Vorhandensein von Dateien zu prüfen. Sowas wie "if xpexist..." oder "if vistaexist..." kann nicht funktionieren. (Zeilen 62 u. 103)
2. das VBScript mit dem START Befehl aufzurufen würde ich sein lasssen, weil dein Batch dann nicht bis zur Abarbeitung des Scripts wartet, sondern weiterrennt. In deinem Fall: entferne das start vor wan.vbs einfach. (Zeilen 57 u. 98)
3. "goto next" geht ins Leere (wobei ich denke, dass du nicht den kompletten Batch gepostet hast)

<edit>
neben ein paar anderen kleinen Unzulänglichkeiten wie:
- die Echoumleitung bei der ersten Zeile besser mit > statt mit >>
- warum versuchst du das Betriebssystem herauszufinden, wenn du in dessen Abhängigkeit zweimal das gleiche VBScript schreibst
- die *.tmp Datei könntest du dir wahrscheinlich sparen, wenn du das ergebnis der VBS Funktion mit WScript.Echo ausgeben lässt und das Script in einer FOR Schleife mit cscript //nologo wan.vbs startest
usw.

Aber vielleicht geht das für den Anfang zu weit.
</edit>

Grüße
rubberman
Member: Pinkywesen
Pinkywesen Dec 30, 2009 at 02:36:30 (UTC)
Goto Top
Danke rubberman,

Für deine schnelle Hilfe ! Ich habe mal was zu deinen Punkten geschrieben:

1. Ja, ist ein Fehler. Hab ich übersehen. Danke !
2. Das VBScript soll aber neben der BATCH Datei laufen
3. Ja, ich habe nicht das ganze Script gepostet. Aber nur der Teil ist hier relevant.

Das Script läuft wieder. Aber es gibt immer noch eine Fehlermeldung beim herausfinden der IP. Ich habe mal einen Screenshot gemacht:
http://www.imgbox.de/users/public/images/x29122o177.jpg

Können wenn wir das erste Problem gelöst haben die anderen "Unzulänglichkeiten" angehen ?

Nochmals Danke für die schnelle Hilfe
Member: rubberman
rubberman Dec 30, 2009 at 03:01:06 (UTC)
Goto Top
Hallo Pinkywesen,

zu 2.) Auf keinen Fall!! Das VBScript erzeugt ja erst die *.tmp Datei, die du im weiteren Verlauf benötigst! Muss also abgelaufen sein, bevor es im Batch weiter geht!

Dein Fehler kommt zustande, weil du bei mehrmaligem Aufruf immer wieder an die vorhandenen Dateien hinzufügst. Ersetze mindestens beim Schreiben des VBScripts die erste Zeile so:
echo Function MyIP_XMLHTTP( ) >wan.vbs

Grüße
rubberman
Member: Pinkywesen
Pinkywesen Dec 30, 2009 at 03:30:29 (UTC)
Goto Top
Nochmals Danke für die schnelle Antwort,

Ich habe jetzt alles so gemacht wie du gesagt hast. Jetzt läuft mein Script zwar fehlerfrei aber ich kriege in die temp.txt nicht die IP-Adresse. Was ist nun falsch ?

Zitat:
- die *.tmp Datei könntest du dir wahrscheinlich sparen, wenn du das ergebnis der VBS Funktion mit WScript.Echo ausgeben lässt und das Script in einer FOR Schleife mit cscript //nologo wan.vbs startest
usw.

Das habe ich leider nicht verstanden. Kannst du es bitte vormachen ? Also ich muss die IP später in der temp.txt haben. Nicht als Ausgabe oder so.

Danke
Member: rubberman
rubberman Dec 30, 2009 at 12:08:10 (UTC)
Goto Top
Hallo Pinkywesen,

falls du die Windowsversion nicht noch für irgendetwas anderes benötigst, kannst du dir die Geschichte eigentlich sparen.

Hier mal die Kurzfassung von dem, was ich meinte:
@echo off &setlocal

>"%temp%\GetIPAdr.vbs" echo Function MyIP()  
>>"%temp%\GetIPAdr.vbs" echo Dim objRequest : Set objRequest = CreateObject("Microsoft.XMLHTTP")  
>>"%temp%\GetIPAdr.vbs" echo objRequest.open "GET", "http://www.whatismyip.com/automation/n09230945.asp", False  
>>"%temp%\GetIPAdr.vbs" echo objRequest.send vbNull  
>>"%temp%\GetIPAdr.vbs" echo If objRequest.status = 200 Then MyIP = objRequest.responseText  
>>"%temp%\GetIPAdr.vbs" echo Set objRequest = Nothing  
>>"%temp%\GetIPAdr.vbs" echo End Function  
>>"%temp%\GetIPAdr.vbs" echo On Error Resume Next  
>>"%temp%\GetIPAdr.vbs" echo WScript.Echo MyIP()  

for /f "delims=" %%i in ('cscript //nologo "%temp%\GetIPAdr.vbs"') do set "IPAdr=%%i"  
del "%temp%\GetIPAdr.vbs"  

if not defined IPAdr (
  echo Die IP Adresse konnte nicht ermittelt werden.
  echo Pruefe bitte die Verbindung zum Internet.
  pause
  goto :eof
) else (
  >temp.txt echo Internet IP: %IPAdr%
)

pause
Das VBScript habe ich noch etwas verändert. Ua. erfolgt die Ausgabe jetzt über "WScript.Echo".
In Zeile 13 erfolgt der Aufruf des Scripts und die Zuweisung der Variablen.
Das > inZeile " >temp.txt echo Internet IP: %IPAdr%" musst du noch zu >> ändern, wenn du vorher die Windowsversion in die temp.txt schreibst.

Grüße
rubberman
Member: Pinkywesen
Pinkywesen Dec 30, 2009 at 12:57:32 (UTC)
Goto Top
Und schon wieder muss ich dir danken,

Nicht böse gemeint. Jetzt ist das Script kurz und läuft fehlerfrei ! Danke nochmal. Aber die Betriebssystemerkennung hätte ich schon gerne drin. Und was ist mit der Localisation und der Local IP ?

Hier nochmal das Script mit temp.txt Speicherung:

@echo off &setlocal

>"%temp%\GetIPAdr.vbs" echo Function MyIP()  
>>"%temp%\GetIPAdr.vbs" echo Dim objRequest : Set objRequest = CreateObject("Microsoft.XMLHTTP")  
>>"%temp%\GetIPAdr.vbs" echo objRequest.open "GET", "http://www.whatismyip.com/automation/n09230945.asp", False  
>>"%temp%\GetIPAdr.vbs" echo objRequest.send vbNull  
>>"%temp%\GetIPAdr.vbs" echo If objRequest.status = 200 Then MyIP = objRequest.responseText  
>>"%temp%\GetIPAdr.vbs" echo Set objRequest = Nothing  
>>"%temp%\GetIPAdr.vbs" echo End Function  
>>"%temp%\GetIPAdr.vbs" echo On Error Resume Next  
>>"%temp%\GetIPAdr.vbs" echo WScript.Echo MyIP()  

for /f "delims=" %%i in ('cscript //nologo "%temp%\GetIPAdr.vbs"') do set "IPAdr=%%i"  
del "%temp%\GetIPAdr.vbs"  

if not defined IPAdr (
  >>temp.txt echo Internet IP: Failure !
  goto :eof
) else (
  >>temp.txt echo Internet IP: %IPAdr%
)
Member: rubberman
rubberman Dec 30, 2009 at 16:36:28 (UTC)
Goto Top
Hallo Pinkywesen

mal sehen, was geht.

@echo off &setlocal

::::::::::::::: OS
>"%temp%\GetOsInfo.vbs" echo Set colOperatingSystems = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery("Select * from Win32_OperatingSystem")  
>>"%temp%\GetOsInfo.vbs" echo For Each objOperatingSystem in colOperatingSystems  
>>"%temp%\GetOsInfo.vbs" echo Wscript.Echo objOperatingSystem.Caption  
>>"%temp%\GetOsInfo.vbs" echo Next  
for /f "delims=" %%a in ('cscript //nologo "%temp%\GetOsInfo.vbs"') do set "OS=%%a"  
del "%temp%\GetOsInfo.vbs"  

>temp.txt echo OS: %OS%

::::::::::::::: Local IP
for /f "delims=: tokens=2" %%i in ('ipconfig^|findstr /i /c:"ip-adr"') do set "loclIPAdr=%%i"  

if not defined loclIPAdr(
  >>temp.txt echo Local IP: Failure !
) else (
  >>temp.txt echo Local IP: %loclIPAdr:~1%
)

::::::::::::::: Net IP
>"%temp%\GetIPAdr.vbs" echo Function MyIP()  
>>"%temp%\GetIPAdr.vbs" echo Dim objRequest : Set objRequest = CreateObject("Microsoft.XMLHTTP")  
>>"%temp%\GetIPAdr.vbs" echo objRequest.open "GET", "http://www.whatismyip.com/automation/n09230945.asp", False  
>>"%temp%\GetIPAdr.vbs" echo objRequest.send vbNull  
>>"%temp%\GetIPAdr.vbs" echo If objRequest.status = 200 Then MyIP = objRequest.responseText  
>>"%temp%\GetIPAdr.vbs" echo Set objRequest = Nothing  
>>"%temp%\GetIPAdr.vbs" echo End Function  
>>"%temp%\GetIPAdr.vbs" echo On Error Resume Next  
>>"%temp%\GetIPAdr.vbs" echo WScript.Echo MyIP()  

for /f "delims=" %%i in ('cscript //nologo "%temp%\GetIPAdr.vbs"') do set "IPAdr=%%i"  
del "%temp%\GetIPAdr.vbs"  

if not defined IPAdr (
  >>temp.txt echo Internet IP: Failure !
) else (
  >>temp.txt echo Internet IP: %IPAdr%
)

::::::::::::::: Country
for /f "tokens=3 delims=	" %%i in ('reg query "HKCU\Control Panel\International" /v "sCountry"') do set "country=%%i"  
>>temp.txt echo Localisation: %country%

pause

Denke, das sollte so ziemlich alles abdecken, was du wolltest.

Grüße
rubberman

<edit>
Da IPCONFIG die IP-Adresse auch nur dann ausspuckt, wenn der Rechner im Net registriert ist, entsprechende Abfrage hinzu.
</edit>