[Batch] Ip-Adressen vergeben. Wer Lust ein script durchzuschauen?

Doomt

Mitglied
Guten Tag.

Ich habe ein Batch-script geschrieben, welches aus einer Config Datei Netzwerke einliest und dann alle LAN-Verbindungen durchprobiert und wenn bei einer der Ping erfolgreich ist, weist das script auch der LAN-Verbindungen einen Namen zu(Welcher aus der Config Datei herausgenommen wird)

Vorgeschichte:
Arbeitskollegen müssen immer wieder auf einem neuen Server LAN-Verbindungen einrichten.
Dieser Server steht meist in etwa 4 verschiedenen LANs und bisher musste dies händisch eingerichtet und getestet werden.

Ein Batch script kann meines wissens nach auf jedem Windows Server ausgeführt werden.

Mein Batch script holt sich via IPConfig die Namen aller Ethernet Adapter und diese werden dann sofort weitergeleitet, wo dann mittels einer Schleife die Config Datei durchgegangen wird und jedes bisher noch nicht vergebene Netzwerk mit netsh dem jeweiligen Ethernet Adapter zugewiesen und getestet:
.) Wenn Erfolgreich:
Netzwerk wird in einer Variable gespeichert, damit keines 2-mal getestet wird, was wenig sinn hätte.

.) Wenn nicht Erfolgreich wird das nächste getestet

Ich habe das Script geschrieben und stehe derzeit vor einer Wand, weis nicht wirklich ob das funktioniert, bzw ob ich Fehler eingebaut habe.

Ich hoffe es gibt hier ein paar willige User die sich dieses Script durchschauen und es vielleicht verbessern bzw berichtigen können.

Informationen:
Es handelt sich um englisch sprachige Windows Server welche meist in 4 verschiedenen LANs stehen und die LAN-Verbindungen heißen am Anfang normalerweise so:
Local Area Connection 1
Local Area Connection 2
Local Area Connection 3
Local Area Connection 4

die Config Datei ist wie folgt aufgebaut:
<Neuer Name> <zu vergebene IP> <Subnet maske> <IP für Ping test>

z.B.:
LAN-01 10.48.222.34 255.255.248.0 10.48.222.1
LAN-02 124.23.12.56 255.255.248.0 124.23.12.1

Code:
@echo off
set TMPIPCONFIGFILE=%TEMP%\~ipconfig%RANDOM%.txt
set Connections=.
set finishLANs=.
set TEMPPINGFILE=$TEMP%\~ping%RANDOM%.txt
set INPUTFILE="conffile ip Config.txt"

type Nul > %TMPIPCONFIGFILE%
type Nul > %TEMPPINGFILE%

ipconfig | findstr /C:"Ethernet Adapter" /i > %TMPIPCONFIGFILE%

for /F "usebackq tokens=1-6" %%a in (%TMPIPCONFIGFILE%) do (
  if not "%%c %%d %%e %%f"=="   " (
    call :FirstSubRoutine %%c %%d %%e %%f
  )
)

del %TMPIPCONFIGFILE% > Nul
del %TEMPPINGFILE% > Nul
goto :EOF

:FirstSubRoutine
set Adapter="%1 %2 %3 %4"
call :SecondSubRoutine %Adapter%
goto :EOF

:SecondSubRoutine
set con=%1
for /F "usebackq tokens=1-4" %%a in (%INPUTFILE%) do (
  call :ThirdSubRoutine %con% %%a %%b %%c %%d
)
goto :EOF

:ThirdSubRoutine
set dName=%1
set dNewName=%2
set dIP=%3
set dSubnet=%4
set dGate=%5
set vorhanden=
for %%a in (%finishLANs:;= %) do (if "%%a"=="%dNewName%" set vorhanden="1" )
if defined vorhanden (
  set _break=
  call :pingTest %dname% %dNewName% %dIP% %dSubnet% %dGate%
  if defined _break (
    goto :EOF
  )
)
goto :EOF

:pingTest
set Name=%1
set Name=%Name%##
set Name=%Name:                "##="##%
set Name=%Name:        "##="##%
set Name=%Name:    "##="##%
set Name=%Name:  "##="##%
set Name=%Name: "##="##%
set Name=%Name:"##="##%
set Name=%Name:~0,-1%"
set newname=%2
set IP=%3
set Subnet=%4
set PINGIPADDRESS=%5
set _ERG=
set vorhanden=
for %%a in (%Connections:;= %) do ( if "%%a"=="%Name%" set vorhanden="1" )
if defined vorhanden (
  goto :EOF
)

echo Interface=%Name% newname="%newname%" IP=%IP% SUBNET=%SUBNET%
netsh interface ip set address name=%Name% static %IP% %SUBNET% > Nul
if ERRORLEVEL 1 (
  goto :EOF
)
echo ping -n 5 %PINGIPADDRESS%
ping -n 5 %PINGIPADDRESS% > %TMPPINGFILE%
for /F "usebackq tokens=1-6" %%a in (%TEMPPINGFILE%) do (
  if "%%a"=="Reply" (
    if "%%b"=="from" (
      if "%%c"=="%PINGIPADDRESS%:" (
        set _ERG="1"
      )
    )
  )
)

if defined _ERG (
  echo Ergebnis: ping erfolgreich
  netsh interface set interface name=%Name% newname=%newname% > Nul
  set finishLANs=%finishLANs%;%newname%
  set Connections=%Connections%;%Name%
  set _break=now
)

if not defined _ERG (
  echo Ergebnis: Ping fehlgeschlagen
  netsh interface ip set address name=%Name% source=dhcp
)

goto :EOF



Ich bedanke mich schon mal im vorraus für alle die sich es angetan haben mein Script zu lesen, bzw es versucht haben.

Ich will keine Kritik an der Schreibweise, war meines Denkens nach so notwendig aufgrund der vielen Variablen die ich verwenden muss, ich suche verbesserungen, Tests, oder ähnliches.

MFG,
Doomt
 
Es wurde gerade ein Test durchgeführt und es funktioniert anscheinend. Trotzdem Danke an alle die es versucht haben :)

mfg,
Doomt
 
um dir zu antworten, muss ich wahrscheinlich etwas deutlicher werden, wobei ich dachte, dass es schon klar genug ist wenn ich von Windows Server rede.

Diese Server haben einen bestimmten zweck und damit müssen sie auch eine bestimmte Adresse bekommen, welche fix vergeben wird.
DHCP ist bei Servern nicht die richtige methode, aber trotzdem Danke. ;)
DHCP ist bei zB Schülern, wo es egal ist welche IP Adresse die bekommen richtig.

Aja und mir soll jetzt niemand kommen mit Adresse reservieren ;)
Wenn ich dhcp aufsetz und dann für jeden PC eine IP reserviere, dann soll mir einmal wer den Sinn hinter dhcp erklären ^^

Es geht hier darum ob das Script funktioniert und nicht um den aufbau des Netzwerkes ;)
Und einem Test eines bekannten von mir, funktioniert es anscheinend.

Freue mich über jede Antwort.

mfg,
Doomt
 
Nun, über die sinnhaftigkeit von DHCP in server netzen (egal ob windows oder nicht), wurde lange und viel von unterschiedlichen experten diskutiert.

Fakt ist, fast alle grossen provider setzen in ihren rechenzentren inzwischen fast ausschliesslich DHCP ein.

Und glaub mir... ich spreche aus erfahrung wenn ich sage - DHCP spaart ne menge administrativen aufwand. Von der zentralen managementkeit noch gar nicht zu reden.

Aber natürlich steht es jedem frei, seine IP addressen so zu vergeben wie er will.
Ich für meinen teil, würde bei unserer server farm den DHCP server definitiv nicht mehr missen wollen.

Was dein script betrifft, sieht es auf jedenfall so aus als könnte es funktionieren. Du solltest allerdings darauf achten, dass dein ping target auf jedenfall erreichbar ist, wenn du es einsetzt.
 
Ja okay, da gebe ich recht. Ich habe nichts gegen DHCP.

hatte noch keine Möglichkeit einsicht in ein Rechenzentrum zu bekommen, aber hab mir das fast schon gedacht. Und wieder was gelernt. :)

DHCP ist ein diskussionsthema, wobei ich nicht meine, dass DHCP schlecht ist, gott sei dank wurde es erfunden :)

Ja es ist natürlich die vorraussetzung für mein Script, dass es in diesem Netzwerk irgendetwas pingbares existiert.
 
Zurück