xcaschox
Goto Top

Je nach IP-Adresse Server für auszuführende Datei ändern

Hallo,
ich benötige eure Hilfe. Ich habe verschiedene Server (in Europa verteilt) auf denen jeweils in einem Share die gleiche auszuführende Datei liegt.
Per Loginscript wird eine Batchdatei ausgeführt, die die jeweiliege Datei ausführen soll die auf dem jeweiligen location Server liegt.

Das ganze soll ungefähr so aussehen.

:LOCATION
for /f "delims= tokens=2" %%a in ('ping -4 %computername% -n 1 ^| findstr "["') do (set ipaddress=%%a)
echo IP address detected: %ipaddress%

REM detect server site and set server

REM detect DE set NAS
if "%ipaddress%"=="%ipaddress:"xxx.xxx.102"=%" (
set server=Germany\public\TIAudit
GOTO WINNT
)
if "%ipaddress%"=="%ipaddress:"xxx.xxx.105"=%" (
set server=AUSTRIA\public\TIAudit
GOTO WINNT
)
if "%ipaddress%"=="%ipaddress:"xxx.xxx.109"=%" (
set server=FRANCE\public\TIAudit
GOTO WINNT
)
:WINNT
REM Run TrackIT Audit
Echo Please Wait....processing inventory

\\%SERVER%\AUDIT.EXE /NOREGAPPS

Leider wird immer der GERMANY Server verwendet.

Hat hier jemand eine Idee?

Danke für eure Hilfe.

Gruß & schon mal Frohe Weihnachten
Carsten

Content-Key: 225047

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

Printed on: April 18, 2024 at 01:04 o'clock

Member: SaschaRD
SaschaRD Dec 20, 2013 at 12:15:43 (UTC)
Goto Top
Hallo Carsten,

warum er immer nur den Germany-Server verwendet? Ist eindeutig:
Du sagt Ihm doch nachdem "detect"
REM detect DE set NAS
if "%ipaddress%"=="%ipaddress:"xxx.xxx.102"=%" (  
set server=Germany\public\TIAudit
GOTO WINNT
)
das er ein "goto" machen sollen.
Somit wird nach der ersten Setzung direkt nach:
:WINNT
REM Run TrackIT Audit
Echo Please Wait....processing inventory

\\%SERVER%\AUDIT.EXE /NOREGAPPS
gesprungen.

Gruß, Sascha
Member: XcaschoX
XcaschoX Dec 20, 2013 at 12:18:23 (UTC)
Goto Top
Hallo Sascha,

leider bin ich nicht der Profi was Batches angeht,
wie kann ich das machen, dass er weiter prüft?

Danke

LG
Carsten
Member: SaschaRD
SaschaRD Dec 20, 2013 updated at 12:32:27 (UTC)
Goto Top
Hallo Carsten,

Lösung-1 ist mit weiteren "Goto's":
REM detect DE set NAS
IF "%ipaddress%"=="%ipaddress:"xxx.xxx.102"=%" (  
set server=Germany\public\TIAudit
echo ger
GOTO AUSTRIA
)
:AUSTRIA
IF "%ipaddress%"=="%ipaddress:"xxx.xxx.105"=%" (  
set server=AUSTRIA\public\TIAudit
echo austria
GOTO FRANCE
)
:FRANCE
IF "%ipaddress%"=="%ipaddress:"xxx.xxx.109"=%" (  
set server=FRANCE\public\TIAudit
echo france
GOTO WINNT
)

Oder Lösung-2, Du lässt die "Goto's" weg:
REM detect DE set NAS
IF "%ipaddress%"=="%ipaddress:"xxx.xxx.102"=%" (  
set server=Germany\public\TIAudit
echo ger
)
IF "%ipaddress%"=="%ipaddress:"xxx.xxx.105"=%" (  
set server=AUSTRIA\public\TIAudit
echo austria
)
IF "%ipaddress%"=="%ipaddress:"xxx.xxx.109"=%" (  
set server=FRANCE\public\TIAudit
echo france
GOTO WINNT
)
Habe Dir dazwischen Mal "echo's/Ausgaben" gemacht, damit kannst Du dann sehen ob er auch wirklich dort ist.


Gruß, Sascha
Member: XcaschoX
XcaschoX Dec 20, 2013 at 13:56:50 (UTC)
Goto Top
Hallo Sascha,
irgendwie läut das ding nicht rund. Hier mal die komplette Batch:

@echo off
REM Determine OS and run appropriate commands
REM if "%OS%"=="Windows_NT" goto LOCATION
REM goto END

VER | find "Microsoft Windows XP [Version 5.1" > nul
IF %errorlevel% EQU 0 GOTO LOCATION
VER | find "Microsoft Windows [Version 6.1" > nul
IF %errorlevel% EQU 0 GOTO LOCATION
VER | find "Microsoft Windows [Version 6.2" > nul
IF %errorlevel% EQU 0 GOTO LOCATION
goto END

:LOCATION
for /f "delims=[] tokens=2" %%a in ('ping -4 %computername% -n 1 ^| findstr "["') do (set ipaddress=%%a)
echo IP address detected: %ipaddress%

REM detect DE set NAS
IF "%ipaddress%"=="%ipaddress:"xxx.xxx.101"=%" (
set server=GERMANY\public\TIAudit
echo GERMANY
)
IF "%ipaddress%"=="%ipaddress:"xxx.xxx.102"=%" (
set server=FRANCE\public\TIAudit
echo FRANCE
)
IF "%ipaddress%"=="%ipaddress:"xxx.xxx.103"=%" (
set server=AUSTRIA\public\TIAudit
echo AUSTRIA
)

:WINNT
REM Run TrackIT Audit
Echo Please Wait....processing inventory
Echo %server%
REM \\%SERVER%\AUDIT.EXE /NOREGAPPS

:END
exit

Irgendwie nimmt wird das Ergebnis %server% immer den letzten server, in dem Fall immer "AUSTRIA".

Gruß
Carsten
Member: Endoro
Endoro Dec 20, 2013 updated at 14:34:09 (UTC)
Goto Top
Hey,
schau dir doch einfach mal die Ausgabe von
echo("%ipadress:"xxx.xxx.xxx.102"=%"  
an. Zoll zahlen ist schon richtig, aber zuviel ist Bestechung face-smile
Abgesehen von allem anderen...
lg.
Member: SaschaRD
SaschaRD Dec 20, 2013 at 14:36:00 (UTC)
Goto Top
Hallo Carsten,

bitte den code mit "<"code">" "</"code">" formatieren, siehe dazu auch
Wenn ich es richtig verstanden haben:
Hast Du die 3 x Server (Deutschland, Frankreich und Österreichen), auf denen jeweils in einem shared-folder, die gleiche auszuführende Datei liegt.
Du möchtest jetzt von deinem lokalen Computer aus per Batch (Loginskript), dich zu den Servern verbinden und die Datei ausführen, Richtig?

Wenn das Skript ausgeführt wird, möchtest Du dann, dass auf allen 3 x Servern die Datei ausgeführt wird oder auf einem bestimmten? Oder beides?
Member: XcaschoX
XcaschoX Dec 20, 2013 at 14:49:29 (UTC)
Goto Top
Hallo Sascha,

Wenn ich es richtig verstanden haben:
Hast Du die 3 x Server (Deutschland, Frankreich und Österreichen), auf denen jeweils in einem shared-folder, die gleiche
auszuführende Datei liegt.
Du möchtest jetzt von deinem lokalen Computer aus per Batch (Loginskript), dich zu den Servern verbinden und die Datei
ausführen, Richtig?
ja, so ist die Konstelation.

Wenn das Skript ausgeführt wird, möchtest Du dann, dass auf allen 3 x Servern die Datei ausgeführt wird oder auf
einem bestimmten? Oder beides?
durch das Script soll quasi gefiltert werde, von welchem Server die Datei gestartet wird. Sprich der Computer in Deutschland soll natürlich die Datei vom Deutschen Server starten, der Computer aus Frankreich natürlich die Datei vom Frankreich Server....

Gruß
Member: SaschaRD
Solution SaschaRD Dec 20, 2013, updated at Dec 23, 2013 at 12:25:13 (UTC)
Goto Top
durch das Script soll quasi gefiltert werde, von welchem Server die Datei gestartet wird. Sprich der Computer in Deutschland soll
natürlich die Datei vom Deutschen Server starten, der Computer aus Frankreich natürlich die Datei vom Frankreich
Server....
Also wird das Loginskript von unterschiedlichen Computer ausgeführt und nicht von einem zentralen?
Die Versionsprüfung ist wofür gedacht?

PC FR führt Datei für Server FR aus.
PC AU Datei für Server AU aus.
PC DE Datei für Server DE aus.
Nur so oder darf PC DE auch die Datei von FR & AU ausführen?
Member: schmitzi
schmitzi Dec 20, 2013 updated at 20:39:35 (UTC)
Goto Top
Hi, eigentlich ganz einfach:

das Problem ist dass Deine Bedingung

IF "%ipaddress%"=="%ipaddress:"xxx.xxx.105"=%"

IMMER zutrifft.

Deshalb hat er bei Deinem allerersten Versuch auch immer den 1. getroffen, also GERMANY,
(und ist wegen des GOTOS da ausgestiegen)

und beim letzten Versuch immer AUSTRIA, weil die GOTOS fehlen und er alle 3 (zutreffenden) Abfragen
durchläuft und die letzte halt gilt.

Also -> an der IF-Zeile arbeiten :O)

Kleine Hilfe:

IF %ipaddress:~8,-4%==101 ( blabla

SO sollte es gehen, und lass die GOTOs WEG, die brauchst Du (dann) gar nicht.


Gruss
RS
Member: Endoro
Solution Endoro Dec 20, 2013, updated at Dec 23, 2013 at 12:25:06 (UTC)
Goto Top
Mein Vorschlag:
IF NOT "%ipaddress%"=="%ipaddress:xxx.xxx.xxx.101=%" set "server=GERMANY\public\TIAudit"&ECHO GERMANY  
IF NOT "%ipaddress%"=="%ipaddress:xxx.xxx.xxx.102=%" set "server=FRANCE\public\TIAudit"&ECHO FRANCE  
IF NOT "%ipaddress%"=="%ipaddress:xxx.xxx.xxx.103=%" set "server=AUSTRIA\public\TIAudit"&ECHO AUSTRIA  
IF NOT DEFINED server ECHO Uups! Server for %ipaddress% not found.&PAUSE
Es geht auch noch mit Forschleifen, Zeigern und hastdunichtgesehen...
lg.
Member: XcaschoX
XcaschoX Dec 23, 2013 at 07:27:39 (UTC)
Goto Top
Hallo Sascha,

Genau,
alle PC´s die im Netzwerk xxx.xxx.101.xxx sollen nur die Datei vom Server im Netzwerk xxx.xxx.101.xxx ausführen, usw.

Die Versionsprüfung ist eigentlich gedacht, damit das ganze nur auf Windows7 und 8 läuft. Ich weiß da ist auch noch die XP abfrage drin.... (muss ich dann noch löschen)

Gruß
Carsten
Member: XcaschoX
XcaschoX Dec 23, 2013 at 07:30:18 (UTC)
Goto Top
Hallo Endoro,
danke für den Tipp, aber ich brauch ja nicht die abfrage auf die ip adresse xxx.xxx.xxx.101 sondern es geht um die Newzwerk adresse xxx.xxx.101.xxx.

Alle PC´s die im Netzwerk xxx.xxx.101.xxx sollen nur die Datei vom Server im Netzwerk xxx.xxx.101.xxx ausführen, usw.

LG
Carsten
Member: Endoro
Solution Endoro Dec 23, 2013 updated at 12:25:19 (UTC)
Goto Top
Hey Carsten,
dann kürze den Vergleichs-IP Ausdruck um ein Oktett: xxx.xxx.101 usw.
lg.
Member: XcaschoX
XcaschoX Dec 23, 2013 at 12:24:58 (UTC)
Goto Top
Hallo Endoro,
super ich glaube jetzt gehts so wie ich es mir vorstelle. Vielen Danke für deine Hilfe.

@SaschaRD, auch die vielen Dank.

Frohe Weihnachten und einen Guten Rutsch.

Liebe Grüße

Carsten