dragonkm
Goto Top

Netzwerkänderung und Eintritt in eine Domäne per Batchscript

Hallöchen,

ich versuche mich gerade im Batchscriptung (hab das vor Jahren mal gemacht) und sitze an meinem kleinen VM Netzwerk vor folgendem Problem:

Ich möchte einen Client per Batchdatei in das VM Netz (Server 2003 mit DHCP, DNS usw. steht bereits) aufnehmen. Da der Server in einem eigenen Netz ist, müssen natürlich die Netzwerkeinstellungen geändert werden und dabei hängt es.

Ich habe folgende Batchdatei geschrieben:

@ECHO OFF
ECHO ***********************************************
ECHO * Script um Rechner in die Domäne aufzunehmen *
ECHO ***********************************************
ECHO.
ECHO.
ECHO Ändere Netzwerkeinstellungen des Rechners
ECHO.
ECHO Neue IP-Adresse:    192.168.0.254
ECHO Neue Subnet-Maske:  255.255.255.0
ECHO Neues Gateway:      192.168.0.1
ECHO.
ECHO.
netsh interface ip set address name="LAN-Verbindung" source=static addr=192.168.0.254 mask=255.255.255.0 gateway=192.168.0.1 gwmetric=1  
ECHO.
ECHO.
ECHO Prüfe ob Netzwerkdaten korrekt geändert wurden:
@for /F "tokens=10,*" %%i in ('ipconfig /all^|find "IP-Adresse"') do @set IP=%%i  
if %IP% == 192.168.0.254 goto SET IPA = OK ELSE SET IPA = NOK
@for /F "tokens=10,*" %%i in ('ipconfig /all^|find "Subnetmaske"') do @set Subnet=%%i  
if %Subnet% == 255.255.255.0 SET SUBNET = OK ELSE Set Subnet = NOK
@for /F "tokens=10,*" %%i in ('ipconfig /all^|find "Standardgateway"') do @set Gateway=%%i  
if %Gateway% == 192.168.0.1 set Gateway = OK ELSE Set Gateway = NOK


IF %IP% == NOK ECHO "IP Adresse wurde nicht geändert"  
IF %SUBNET% == NOK ECHO "Subnetmaske wurde nicht geändert"  
IF %GATEWAY% == NOK ECHO "Standardgateway wurde nicht geändert"  
IF %IP% == OK ECHO "IP Adresse wurde geändert"  
IF %SUBNET% == OK ECHO "Subnetmaske wurde geändert"  
IF %GATEWAY% == OK ECHO "Standardgateway wurde geändert"  
PAUSE

Die Netzwerkdaten werden geändert, doch bei der Überprüfung bekomme ich die Meldung das "Set syntaktisch falsch wäre" Ich vermute, dass ich in der IF Abrage in Zeile 19 einen Fehler habe. Ich hoffe mir kann jemand weiterhelfen face-smile

Content-ID: 182726

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

Ausgedruckt am: 22.11.2024 um 22:11 Uhr

bastla
bastla 28.03.2012 um 13:57:58 Uhr
Goto Top
Hallo DragonKM!

So sollte es besser gehen:
if %IP%==192.168.0.254 (SET IPA=OK) ELSE (SET IPA=NOK)
Generell: Leerzeichen in Batch nur dort verwenden, wo sie wirklich erforderlich sind ...

Grüße
bastla
DragonKM
DragonKM 28.03.2012 um 14:20:07 Uhr
Goto Top
Vielen Dank für die schnelle Antwort,

nun bekomme ich folgende Meldung:

"(SET" ist syntaktisch an dieser Stelle nicht verarbeitbar.  
bastla
bastla 28.03.2012 um 14:27:55 Uhr
Goto Top
Hallo DragonKM!

Der Fehler solltet aber doch nur auftauchen, wenn %IP% leer ist (den ganzen Batch hatte ich mir nicht angesehen) ...

Vermeiden lässt sich der Fehler entweder mit
if "%IP%"=="192.168.0.254" (SET IPA=OK) ELSE (SET IPA=NOK)
oder mit
if defined IP if %IP%==192.168.0.254 (SET IPA=OK) ELSE (SET IPA=NOK)
- ansetzen musst Du aber sicher schon bei der Ermittlung der IP, zB (unter XP) per
for /F "tokens=14" %%i in ('ipconfig /all^|find "IP-Adresse"') do "set IP=%%i"
Grüße
bastla
DragonKM
DragonKM 28.03.2012 um 14:33:11 Uhr
Goto Top
Hab den Fehler gefunden, es liegt an dem Gleichzeichen in der Abfrage,

habe die Abfrage nun so geschrieben

if %IP% EQU "192.168.0.254" THEN do @SET IPA=OK ELSE do @SET IPA=NOK  

und sie geht ;) Dabei ist mir aufgefallen, dass hier noch ein Fehler drin ist

@for /F "tokens=10,*" %%i in ('ipconfig /all^|find "IP-Adresse"') do @set IP=%%i  
bastla
bastla 28.03.2012 um 14:41:48 Uhr
Goto Top
Hallo DragonKM!
und sie geht ;)
Dass keine Fehlermeldung ausgegeben wird, bedeutet aber nicht, dass die Zeile funktioniert (was leicht daran zu erkennen ist, dass %IPA% so keinen (neuen) Wert zugewiesen bekommt) ... face-wink

Grüße
bastla
DragonKM
DragonKM 28.03.2012 um 14:44:45 Uhr
Goto Top
habs gemerkt :D

aber nun hab ich es auch ;) Ist eine Mischung aus deiner und meiner Lösung und das geringe Verständins meinerseits mit der geheimnisvollen Token Zahl :D

@for /F "tokens=14" %%i in ('ipconfig /all^|find "IP-Adresse"') do @set IP=%%i  
if %IP% EQU 193.168.0.254 (SET IPA=OK) ELSE (SET IPA=NOK)

Ich lass das hier mal auf "nicht gelöst" falls ich noch mehr Fragen zu der restlichen Batch habe :D

Vielen Dank erstmal
bastla
bastla 29.03.2012 um 12:30:23 Uhr
Goto Top
Hallo DragonKM!

Die "geheimnisvolle Token Zahl" bekommst Du durch einfaches Abzählen - wenn das Trennzeichen (= Delimiter) nicht angegeben wird, trennt "for /f" bei jedem Leerzeichen / jedem TAB (wobei unmittelbar aufeinander folgenden Trennzeichen nur als eines gezählt werden) - daher ist aus der Zeile
        IP-Adresse. . . . . . . . . . . . : 193.168.0.254
"IP-Adresse" das Token #1, und das Token #13 der Doppelpunkt ...

Grüße
bastla
DragonKM
DragonKM 29.03.2012 um 20:40:00 Uhr
Goto Top
ah danke face-smile ich hab nun das Script angepasst und es funktioniert auch face-smile

@ECHO OFF
ECHO ***********************************************
ECHO * Script um Rechner in die Domäne aufzunehmen *
ECHO ***********************************************
ECHO.
ECHO.
ECHO Ändere Netzwerkeinstellungen des Rechners
ECHO.
ECHO Neue IP-Adresse:    192.168.0.254
ECHO Neue Subnet-Maske:  255.255.255.0
ECHO Neues Gateway:      192.168.0.1
ECHO.
ECHO.
netsh interface ip set address name="LAN-Verbindung" source=static addr=192.168.0.254 mask=255.255.255.0 gateway=192.168.0.1 gwmetric=1  
ECHO.
ECHO.
ECHO Prüfe ob Netzwerkdaten korrekt geändert wurden:
for /F "tokens=14" %%i in ('ipconfig /all^|find "IP-Adresse"') do @set IP=%%i  
if %IP% EQU 192.168.0.254 (SET IPA=OK) ELSE (SET IPA=NOK)
for /F "tokens=13" %%i in ('ipconfig^|find "Subnetzmaske"') do @set SN=%%i  
if %SN% EQU 255.255.255.0 (SET SNA=OK) ELSE (Set SNA=NOK)
for /F "tokens=12" %%i in ('ipconfig^|find "Standardgateway"') do @set GW=%%i  
if %GW% EQU 192.168.0.1 (SET GWA=OK) ELSE (Set GWA=NOK)


IF %IPA%==NOK ECHO IP Adresse wurde nicht geändert
IF %IPA%==OK ECHO IP Adresse wurde geändert
IF %SNA%==NOK ECHO Subnetmaske wurde nicht geändert
IF %SNA%==OK ECHO Subnetmaske wurde geändert
IF %GWA%==NOK ECHO Standardgateway wurde nicht geändert
IF %GWA%==OK ECHO Standardgateway wurde geändert


net use * /d /y
netdom.exe JOIN %COMPUTERNAME% /domain:dkm /UserD:Administrator /PasswordD:PASSW0rD!
 

Jetzt müsste nur noch ne Überprüfung erfolgen, ob der Rechner in die Domäne aufgenommen wurde. Also ohne Neustart ;)