Batch Skripte

Die Urmutter der Windows Skripte hat im Laufe der Zeit immer wieder Erweiterungen erfahren, auf die hier nicht eingegangen wird. Für eine Sammlung von Links zur Batch Programmierung verweise ich auf diese Webseite.

Das nachfolgende Batch Skript in Verbindung mit choice.exe und dnscmd.exe dient als Anregung für den Einsatz in der Praxis. Mit dem Skript können aus den Einträgen einer Datei Hosts.txt die A und PTR Records in einem Microsoft DNS Server erstellt werden. Das kann beispielsweise sehr nützlich bei der Migration einer NT oder Samba Domäne auf Active Directory und DNS sein.


@echo off
setlocal
set SRV=Your_DNS_Server
set FZONE=Your.domain.com
set RZONE=168.192.in-addr.arpa
set IN=Hosts.txt

echo Ist die Datei Hosts.txt vorhanden und steht darin je ein Eintrag fuer DNS in der Form ...
choice /c jn /m "Hostname;IP-Adresse ?"
if errorlevel 2 goto exit

echo .
echo "Lese %IN% und erzeuge A Records ..."
for /f "tokens=1-2 delims=;" %%a in (%IN%) do (
echo %%a %%b
dnscmd %SRV% /RecordAdd %FZONE% %%a A %%b >> Add2DNS_A.log)

echo "Lese %IN% und erzeuge PTR Records ..."
for /f "tokens=1-2 delims=;" %%a in (%IN%) do (
echo %%b %%a
for /f "tokens=3,4 delims=." %%e in ('echo %%b') do (
dnscmd %SRV% /RecordAdd %RZONE% %%f.%%e PTR %%a.%FZONE% >> Add2DNS_PTR.log
))

endlocal
:exit

In der Datei Hosts.txt muss je Server eine Zeile Hostname;IP-Adresse vorhanden sein.

Im Skript werden mit set ... die Variablen definiert.
Mit choice ... und errorlevel wird auf der Konsole eine Abfrage nach ja/nein ausgewertet, um einen Abbruch zu ermöglichen.
Mit for /f ... do () wird die Datei hosts.txt zeilenweise eingelesen und die eingelesenen Werte zur Weiterverarbeitung an dnscmd.exe übergeben.
Mit tokens=1-2 ist festgelegt, dass die durch delims=; getrennten Werte (also Hostname und IP-Adresse) über die Variablen %%a und %%b als Parameter an dnscmd.exe übergeben werden.
Mit dnscmd %SRV% /RecordAdd %FZONE% ... wird für jeden Host ein A Record auf Your_DNS_Server erzeugt.

Mit for /f ... do () wird die Datei hosts.txt ein zweites Mal zeilenweise eingelesen und die eingelesenen Werte über delims=; getrennt zur Weiterverarbeitung an eine eingeschlossene for /f ... in ('echo %%b') do () Loop übergeben.
In dieser eingeschlossenen Loop wird mit for /f nicht eine Datei eingelesen, sondern die Ausgabe von 'echo %%b' (IP-Adresse) ausgewertet. Aus der IP-Adresse wird mit tokens=3,4 der 3. und 4. Teil der IP-Adresse extrahiert und an dnscmd %SRV% /RecordAdd %RZONE% ... als Parameter zur Erzeugung eines PTR Records übergeben.

Die Ausgaben von dnscmd werden in eine Datei umgeleitet.

Ich hoffe, dass ich mit meinen Skripten ein paar praktische Beispiele geben kann.